将一些项目中的一些独立功能打包成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 。

最新文章

  1. C语言中的sizeof()
  2. shell简单用法笔记(shell中数值运算)二
  3. 在吉日嘎拉DotNet.WebForm中使用FluentScheduler调度任务
  4. Pictures of Ascii Art
  5. sqlserver快照,启用基于行版本控制的隔离级别
  6. Saltstack系列1:安装配置
  7. hdu 5273 Dylans loves sequence
  8. 窥探EasyMock(1)基础使用篇
  9. nginx 根据IP 进行灰度发布
  10. PTF在PET上印刷線路的注意事項
  11. 基于Angularjs实现图片上传和下载
  12. header头参数 确定该文件类型
  13. ID过滤靓号写法(PHP和Nodejs版本)
  14. drupal简单安装和插件安装
  15. 个股和股票池的beta系数的估算
  16. RLE Plots: relative log expression
  17. sqoop2 缺少 jackson-core-asl-1.8.8.jar 和 jackson-mapper-asl-1.8.8.jar 这两个jar包
  18. JDK源码阅读之Collection
  19. java & maven pom
  20. linux系统中/etc/syslog.conf文件解读

热门文章

  1. Assembly.LoadFrom() 方法加载程序集,无法转换类型
  2. C#LeetCode刷题之#383-赎金信(Ransom Note)
  3. 一个基于 Beego 的,能快速创建个人博客,cms 的系统
  4. Android 用versionName判断版本大小(是否进行版本更新)
  5. 实现0.5px边框线
  6. django自带orm妙用
  7. firewall几个常用命令
  8. 更换IntelliJ Idea的Terminal为git_home/bin/sh.exe命令端程序
  9. 第6篇 Scrum 冲刺博客
  10. Typora--我用过的最好用的markdown编辑器