制作包含依赖库的AAR包

android studio支持把一个库工程输出为aar格式,aar格式除了.class文件外,还可以包含资源文件,库文件等,这就在一定程度上弥补了jar的不足。
这样发布一个sdk就可以以aar格式发布一些带界面逻辑的功能。但由于模块化和依赖等原因,项目有时会生产许多个aar,发布多个aar文件显然不是一个好的方案,
并且还有混淆的问题。所以最好的方法是把所有的aar合并为一个,这个最终的aar保护所有的依赖的aar和so文件等。

其实aar本身就是个zip格式的文件,我们生成aar压缩文件里的所有文件,我们就可以合成最终的aar。

一 建一个空的app工程,并且grade编译版本设置为1.3
 dependencies {
        classpath 'com.android.tools.build:gradle:1.3.0'
    }

二 在app工作中,应用所有的aar。
2.1 将所以aar文件复制到app工程的libs目录下
2.2 引用所有lib工程
   compile(name: '工程名', ext: 'aar')
2.3
     repositories {
        flatDir {
            dirs 'libs'
        }
    }

三  打开混淆开关,编译release版
     buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

四  取出编译中生产的文件,合并aar,可以自己写脚本
 jar位置: \build\intermediates\classes-proguard\release\classes.jar
 R.txt,res等文件都能在intermediates目录下找到相应的所有aar合并后的相应文件。
 
 这些文件都找到后,按aar文件的目录格式放在一起,然后把这个目录压缩为zip包, 这就是最终的合并后的aar文件。

 五 这里要特殊处理下:
解析R.txt文件,把里面的所有资源类型,声明一份占位的资源文件aar_res.xml

<resources>
    <public id="0x71100110f" name="base_fragment" type="layout" />
<public id="0x71100111f" name="base_bk" type="color" />
<public id="0x71100112f" name="button" type="id" />
    </resources>
 
 如果是类型是id,还需要一个id列表声明文件ids.xml
 
 <resources>
    <item name="button" type="id" />
</resources>

六  将aar_res.xml和ids.xml 和步骤五生成的.aar文件一起打包给发布,即可。

posted @ 2016-06-29 18:42  tonny.lee  阅读(2060)  评论(0编辑  收藏  举报