【盗墓笔记】图解使用fat-aar方式在AndroidStudio中打包嵌套第三方aar的aar
将一些项目中的一些独立功能打包成aar,不仅能于项目解耦,还能够提供给其它项目使用相同的功能,可谓是为项目开发带来了很大的便利。最近第一次做sdk,碰到一些问题,花了不少时间才解决,所以这里做一下简单的记录,方便以后参考,也希望能够给碰到同样问题的朋友提供一些便利。
本篇包含如下两种打包场景:
(1)Module中不含有其它aar
(2)Module中嵌套第三方aar
1、Module中不含有也不依赖其它第三方aar
(1)在Project中新建Module,这里以默认名为app的Module来举例,在app中实现需要封装的功能。
(2)进入到app的build.gradle文件

在①处,将 apply plugin: 'com.android.application' 修改为 apply plugin: 'com.android.library',该Module会变成了一个library。
在②处,注释掉applicationId这一行。由于打包后该Module不再是一个独立的应用,而是一个其它项目的附属,所以它不配拥有独立的applicationId!(开个玩笑,希望这个aar不要生气罢工哈-_-)。
(3)进入到AnroidManifest.xml中

在③处,如果有自定义的Application类,把这行删掉。因为打包成aar并被其它项目引用后,该AnroidManifest.xml会和所在项目的AnroidManifest.xml合并,所谓“一山不容二虎”,所以这里必须删除掉。
在④处,icon这一行也要去掉。道理和上面一样,否者aar被引入到项目中并安装后,桌面上会出现两个图标,其中一个还不能运行。
(4)进入到Gradle界面

点击⑤处,等上几秒钟,就能够生成aar了,aar路径如下图:

2、该Module中包含有其它aar
Module依赖其它aar的场景,可能是该aar在Module的libs目录中,也可能在某个独立的Module中,只是主Module依赖了该aar所在的Module。这里我碰到的是第一中情况,也就是该aar在Module的libs目录中的情况,这里咱们要用到fataar方案。
(1)先看看整体Project的部署情况,A处是嵌套的aar

(2)进入到B处的build.gradle文件

文件中要加上D处这一行,应用fat-aar。由于是libs中的aar是嵌套的,所以在E处需要用embed。
(3)进入到C处的build.gradle,也就是整个Project的build.gradle文件

按照上图中的,添加F、G、H处的代码。
结合场景1的操作,再根据上述的3个步骤,这个嵌套了第三方aar的目标aar就生成了。
3、答疑
问:如果我们只采用(1)中的步骤,而不是使用fataar的方式来打包嵌套第三方aar包的aar,那会出现什么问题呢?
答:如果只采用(1)中的方式,也能生成aar。但是我们的项目在使用时就需要依赖我们生成的aar,还要在项目中依赖这个第三方aar,可见这并不是我们想要看到的。当然,还有其它的打包方式来解决aar嵌套aar问题的方案,fataar方式只是其中一种,至于其它方式笔者没有研究过,读者可以自己尝试一下。
4、推荐阅读
如下链接中包含了更多使用fataar打包复杂aar的场景,碰到相同场景的朋友可以参考该链接:https://github.com/kezong/fat-aar-android 。
【盗墓笔记】图解使用fat-aar方式在AndroidStudio中打包嵌套第三方aar的aar的更多相关文章
- 在AndroidStudio中数据存储第三方数据管理Bmob的使用
---恢复内容开始--- 在日常写代码的过程中我们比较痛苦的就是数据库的建立和使用,那么今天来介绍一下一个第三方的数据管理平台Bmonb. 一.我们首先进入Bmob的官网创建一个账号 Bome官网网址 ...
- 在AndroidStudio中引入SlidingMenu第三方库的步骤
步骤一: 在GitHub上下载库文件 步骤二: 在需要引入库的项目中导入一个Moudle,如下图: 步骤三: 将下载后的Slidingme ...
- ANDROID - 打包和引用本地的AAR
打包方法: 打开Gradle面板 Gradle Projects: 选择Library对应的Gradle Task,比如:":testsdk": 依次 Tasks > ...
- AndroidStudio中添加依赖的三种方式以及如何引入so文件和arr文件
AndroidStudio中添加依赖的三个选项,如图: 分别为:库依赖(Library dependency).文件依赖(File dependency)和module依赖(Module dep ...
- AndroidStudio中activity实现去掉标题栏
1.在代码中实现 this.requestWindowFeature(Window.FEATURE_NO_TITLE) 这段代码需要放在setContentView()前面 2.设置在Manifest ...
- androidStudio中如何加载字体资源?
在android中字体的格式总是不能尽善尽美的显示出来 , 于是要求我们使用一些有美感的字体,加载的方式(就像HTML的字体一样),我们需要通过加载字体的方式来使用android中不曾提供的字体; ...
- Eclipse下使用Fat Jar插件对源代码进行打包
这两天需要对一个项目进行打包,并在服务器上部署成后台服务模式进行执行,原来使用eclipse进行打包很难用,配置文件容易出错,生成的jar不能正常运行.后来发现Fat Jar Eclipse Plug ...
- androidStudio 中 gradle 常用功能
1. gradle 使用 svn 当前版本信息. def getSvnRevision() { new ByteArrayOutputStream().withStream { os -> de ...
- AndroidStudio项目打包成jar
AndroidStudio项目打包成jar 前言:在eclipse中我们知道如何将一个项目导出为jar包,现在普遍AndroidStuido开发,这里一步一步详加介绍AS项目打包成jar,jar和ar ...
随机推荐
- flask-sqlalchemy同字段多条件过滤
举例 from sqlalchemy import or_,and_# from operator import or_, and_ allapp = AppServer.query.filter(a ...
- Linux学习笔记 一 第三章 Linux常用命令
第三章Linux常用命令 一.文件处理命令 1.命令格式 2.目录处理命令:ls 3.目录处理命令:mkdir 4.文件处理命令: touch
- Mybatis-08-动态SQL
动态SQL 什么是动态SQL? 根据不同的条件生成不同的SQL语句. if choose(where,otherwise) trim(where,set) foreach 搭建环境 create ta ...
- 实体类转xml
看项目中需要实体类转xml,大家是拼接的.感觉可以利用反射实现.于是写了下 代码如下 package com.kevin.util; import org.springframework.util.O ...
- topic相关问题
1.下面是一个topic数据出现堵塞的情况示图. 如图所示,delta列表示当前分区未处理的数据条数,kafka current表示推送到topic的数据量,spout current表示已经处理的数 ...
- WordCloud教程(上)
先贴代码: import wordcloud,jieba with open('datas/1.txt') as rt:#,encoding='utf-8' comment_text=rt.read( ...
- 要有一颗理财的心 - 读<富爸爸.穷爸爸>
记得工作没多久后的一次加薪的例行谈话.部门经理和我说,不能靠工资过日子,要多想想怎么投资,我的主要财富就是靠投资赚来的.当时第一反应,老板,你不给我加薪找这借口也太牵强了吧.我的收入只有工资,我的工资 ...
- layui上传同一张图片第二次时choose没有反应
将上传文件的input的val设置为空 $("#test11").parent().find("input").val('');
- php使用curl来获取远程图片
本文章来介绍php使用curl来获取远程图片实现方法,有需要了解采集远程图片的朋友不防进入参考. curl要求php环境支持才行. 可以运行phpinfo()函数是否支持,一般要将php.ini中;e ...
- ominigraffle实践之画精美流程图+自动导出Xcode工程类图
背景 在平常阅读各种文章时,注意到有的文章中流程图做得特别漂亮.特别羡慕.于是去搜索了下,发现mac平台好评很高的是一款名为ominigraffle的软件.这款软件不仅可以画图,还可以导出Xcode工 ...