溫故而知新,活到老,學到老,無畏艱難,年輕人不要太講武德。。。。。。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下,
最後: 溫故而知新,活到老,學到老,無畏艱難,年輕人不要太講武德。。。。。。