多模块打包AAR 之 fat-aar

                            

有个特殊的需求要将项目中多个模块打包成一个aar给第三方使用,再多方比较后决定用fat-aar。

基础介绍:

项目地址:github.com/adwiv/android-fat-aar

功能介绍:多模块合并,支持合并模块中依赖的 jcenter   JAR  (aar  测试没成功)

缺陷:不能合并AIDL,不支持Multiple build types(只支持release)其他;

使用方法:参考项目github  ,例如对依赖的模块

embedded  project(':mylibraryAA1')

embedded  project(':mylibraryB')

embedded 'com.google.code.gson:gson:2.5'(jar 可以  aar  没成功)

获取aar  :执行,在outputs 下获取aar

多模块打包AAR 之 fat-aar_第1张图片

实战:

项目模块较多 这里以一个demo为例介绍fataar,只说比较复杂的情况。

demo依赖关系 ,三级、有模块重复依赖,够接近实战了。

                  mylibraryA

                ↙                      ↘

      mylibraryB                mylibraryAA1

               ↙                                ↘

mylibraryBase                             mylibraryBase

**这里所有的模块必须是lib形式。

这样的依赖关系可以打出包,但是在使用的时候报错:

解压aar包在libs发现 重复R文件

多模块打包AAR 之 fat-aar_第2张图片

这是重复依赖mylibraryBase导致的,有个笨笨的方法可以解决就是 把mylibaryB.jar 删了,重新打包成aar。这样做也是可以的,但是我们希望自动化,这样就要修改fat-aar  ,

多模块打包AAR 之 fat-aar_第3张图片
重新打包

在看fat-aar.gradle 脚本的时候发现这个打包R文件的方法,我故意定义了一个找不到的路径ext.base_r22x_dir ="$build_dir/fat-aar/release/release";去阻止合并R文件,结果就改造了一个叫nor_fat-aar.gradle 的脚本 使用方法一样,打出的包可以直接使用了。

task embedRClass(type: org.gradle.jvm.tasks.Jar,dependsOn: collectRClass) {

println"EMBED R CLASS"

destinationDir file("$bundle_release_dir/libs/")

println destinationDir

from base_r22x_dir

println base_r22x_dir

}

发问:如果模块中依赖的是jcenter 上的aar ,用embedded,会不会报错(我试了下没有成功)?

资源文件冲突  用resourcePrefix "liba_"解决?

你可能感兴趣的:(多模块打包AAR 之 fat-aar)