Android多Module开发,最终打包成一个aar对外提供

文章目录

  • 前言
  • 问题
  • 解决方案

前言

现在通过Android Studio进行多Module开发已经非常常见了,除了方便我们分离项目业务,还可以很好的实现基础代码的复用

问题

我们在多Module开发后,如果是直接打包apk还好,直接可以通过gradle命令或者通过AS图形化界面就可以实现打包apk;但是如果我们只是为了提供一个功能模块,方便其他开发人员接入呢,我们使用了多个Module,能不能最终只对外提供一个aar呢,而不是每个Module都生成一个aar?

解决方案

在github上有个类似的项目,解决思路大概是在gradle的打包任务不同task中插入一些task,从而实现将多个Module最终打包成一个aar。
项目地址
缺点: Android gradle的版本更新较快,维护成本太大,作者应该也是看着维护成本较大,所以后来不维护了吧

在需求的不断紧逼下,最终我们通过另外一种方式来实现,思路如下:
在打包aar前,先将多个Module合并成一个Module,合并成一个Module后再通过gradle来打包aar,这样打包出来就是一个aar了。
主要需要解决如下两个问题:

  • 资源文件的合并
  • 多个Module下的Manifest文件中的标签的合并

资源合并还好,只要在复制到同一个Module前,分别将不同Module下的资源文件做重命名即可,最好在开发时对不同Module使用不同的前缀来区分,这样合并会更方便;
Manifest的合并,所依赖的三方不需要我们来合并(接入者依赖后AS会自动将三方合并),主要是我们自己的Module中Manifest的合并,主要有如下几种思路:

  • 当前我们也可以将所有的标签统一放到一个Module中,打包aar时指定使用的Manifest即可;
  • 按照Android Developers上Manifest合并规则,编写合并脚本
  • 使用Android gradle的Manifest合并task

这里主要说第三种思路,相应的task为 processReleaseManifest,步骤如下:

  • 执行每个Module的assembleRelease,为每个Module生成一个aar
  • 新建一个Application的Module,即 apply plugin: 'com.android.application'可生成apk的Module(因为只有这个Module才会有processReleaseManifest这个task)
  • 运行改Module的processReleaseManifest,即可在build目录下的文件中找到生成的Manifest文件(这里需要注意下,每次Android gradle大版本升级,生成的Manifest目录会不相同
  • 通过这个Manifest和合并好的资源文件/Java源文件,组成一个Module,通过assembleRelease来打包成一个aar

以上步骤可以通过gradle脚本在临时目录下进行,打包完成后,再进行删除,只输出最终产物,实现自动化

你可能感兴趣的:(android,gradle,Android)