温故而知新,活到老,学到老,无畏艰难,年轻人不要太讲武德。。。。。。java
不少时候开发须要将本身的应用封装为一个模块儿供别人使用android
一、jar包,若是仅仅是逻辑代码不包括资源文件 这时候能够将模块儿封装为Jar包,比较简单git
二、aar包,若是须要将模块儿代码逻辑以及资源文件甚至是所依赖的模块儿所有封装起来,那么就封装为aar包github
封装为aar包的具体步骤:app
一、在app的build.gradle加上以下代码:maven
apply plugin: 'com.android.library'//先将工程变为library apply plugin: 'com.jakewharton.butterknife' apply plugin: 'com.kezong.fat-aar'//引入fat-aar这个插件
第一行将工程变为library,gradle
第三行引入fat-aar这个插件目的合并多个aar文件的库,当咱们将工程封装为一个aar时候 若是这个工程自己还引用到其余的库,以下图:ui
那么这时候须要将所引用的库也都打包成aar,这样的话就造成为了引用咱们的aar,客户须要引用咱们所依赖的全部库的aar包,github已经有方便的库合并这些aar文件,google
就是fat-aar,使用这个库时候不但要在此引入这个插件,还须要在工程的build.gradle里加上:url
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
二、删除appid
删除apk入口
删除application标签里会和客户应用冲突的代码
三、咱们使用到的第三方依赖库是不会被打包到aar里的,以下:
这时候最简单的方式是让客户的应用也去集成这些依赖库
四、若是没有其余特殊需求那么直接使用Gradle的assemble打包就能够打包aar了
这时候你会在build文件夹下获得aar包
注意事项:
一、当项目中使用到ButterKnife时候,会遇到以下错误:多是ButterKnife在作反射时候没有处理完善
方案:工程的build.gradle引入下面的插件
com.jakewharton:butterknife-gradle-plugin:10.2.1
在app的build.gradle中使用此插件:
将项目中全部butterKnife使用的R改成R2:
全部的switch改成if-else的形式 就能够了。
二、最重要的就是最后的代码混淆了:写好本身的混淆规则文件,在app的build.gradle开启混淆
若是包含子moudle那么在子moudle的build.gradle里边这样添加混淆规则:
这样方便子moudle本身管理本身的混淆规则不会形成混淆的冗余,
再者,若是有特殊变态需求,能够将子moudle移到app这个moudle下,
最后: 温故而知新,活到老,学到老,无畏艰难,年轻人不要太讲武德。。。。。。