温故而知新,活到老,学到老,无畏艰难。。。。。。
很多时候开发需要将自己的应用封装为一个模块儿供别人使用
1、jar包,如果仅仅是逻辑代码不包括资源文件 这时候可以将模块儿封装为Jar包,比较简单
2、aar包,如果需要将模块儿代码逻辑以及资源文件甚至是所依赖的模块儿全部封装起来,那么就封装为aar包
封装为aar包的具体步骤:
1、在app的build.gradle加上如下代码:
apply plugin: 'com.android.library'//先将工程变为library
apply plugin: 'com.jakewharton.butterknife'
apply plugin: 'com.kezong.fat-aar'//引入fat-aar这个插件
第一行将工程变为library,
第三行引入fat-aar这个插件目的合并多个aar文件的库,当我们将工程封装为一个aar时候 如果这个工程本身还引用到其他的库,如下图:
那么这时候需要将所引用的库也都打包成aar,这样的话就形成为了引用我们的aar,客户需要引用我们所依赖的所有库的aar包,github已经有方便的库合并这些aar文件,
就是fat-aar,使用这个库时候不但要在此引入这个插件,还需要在工程的build.gradle里加上:
buildscript {
repositories {
google()
// jcenter()
maven{ url 'http://maven.aliyun.com/nexus/content/groups/public'}
maven { url 'https://www.jitpack.io' }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.6.2'
classpath 'com.tencent.bugly:symtabfileuploader:latest.release'
classpath 'com.jakewharton:butterknife-gradle-plugin:10.2.1'
classpath 'com.kezong:fat-aar:1.2.15'
}
}
使用这个插件也非常简单:
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
embed project(path: ':moudleA', configuration:'default')
embed project(path: ':moudleB', configuration:'default')
}
这里用到embed关键字,目的是合并这些所依赖的moudle
2、删除appid
删除apk入口
删除application标签里会和客户应用冲突的代码
3、我们使用到的第三方依赖库是不会被打包到aar里的,如下:
这时候最简单的方式是让客户的应用也去集成这些依赖库
4、如果没有其他特殊需求那么直接使用Gradle的assemble打包就可以打包aar了
这时候你会在build文件夹下得到aar包
注意事项:
1、当项目中使用到ButterKnife时候,会遇到如下错误:可能是ButterKnife在做反射时候没有处理完善
方案:工程的build.gradle引入下面的插件
com.jakewharton:butterknife-gradle-plugin:10.2.1
在app的build.gradle中使用此插件:
将项目中所有butterKnife使用的R改为R2:
所有的switch改为if-else的形式 就可以了。
2、最重要的就是最后的代码混淆了:写好自己的混淆规则文件,在app的build.gradle开启混淆
如果包含子moudle那么在子moudle的build.gradle里边这样添加混淆规则:
这样方便子moudle自己管理自己的混淆规则不会造成混淆的冗余,
再者,如果有特殊变态需求,可以将子moudle移到app这个moudle下,
最后: 温故而知新,活到老,学到老,无畏艰难