這篇文章主要是在前幾篇文章的基礎上實現一個Android打包的外掛,所以沒看過前幾篇文章的朋友可以先檢視:
本來想將寫的外掛上傳到maven提供給大家使用,但是後來還是決定以開源庫的形式提供給大家,主要是因為
- 網上關於Gradle功能性外掛的開源工程很少,很難找到學習資料,這個庫可以方便開發者入門,學習
- 開發者打包需求各種各樣,由於提供的介面不夠,可能會影響開發者使用,所以,不如將原始碼提供給大家。
- 也希望大家多多star,有什麼意見可以給我留言 demo地址
引入工程
由於並沒有上傳maven,只需要把demo工程中的buildSrc資料夾貼上入自己的工程即可使用 有問題可以issues我,或者微信公眾號給我留言: 我的公眾號:
功能介紹
這個外掛的主要功能分為三部分
打包apk
- 打包apk提供了輸出到指定資料夾的功能
- 打包apk提供了修改apk名字的功能
- 打包apk提供了修改渠道或修改AndroidManifest指定欄位的功能
使用方式
修改 apk module的build.gradle
apply plugin: 'deep.app'
deep{
name "{name}_{type}_{flavor}_deep.apk"
path "../out"
holder= [aaa:123,bbb:666]
}
複製程式碼
引數 | 描述 |
---|---|
name | 輸出的apk名字 |
path | 指定輸出路徑 |
holder | AndroidManifest指定替換的欄位 如上述:將AndroidManifest中的aaa替換成123,bbb替換成666 |
需要注意的是如果想指定名字為普通名字直接輸入字串即可,如果需要與變異模式繫結,只需要加{}:
引數 | 描述 |
---|---|
{name} | 當前module的名字 |
{type} | 編譯方式,debug release或其它自定義的模式 |
{flavor} | flavor,如果沒有自定義就沒有 |
效果如下:
特殊說明
可能有開發者會問,為什麼沒有提供選擇打包檔案的功能,即不同apk打包不同檔案,如果有這種需求的朋友,建議使用flavor,android提供了flavor可以很方便設定打包出不同報名不同內容的apk,如果對flavor感興趣的朋友可以給我留言,或者檢視我之前的一片文章Android工程gradle詳解
打包aar或jar
打包aar或jar提供了兩種不同形式配置
- aar與apk類似,提供了替換Androidmanifest內容的功能
- aar 提供了指定輸出路徑或輸出內容的功能,與apk打包一致
- jar提供了指定混淆,指定打入內容,指定去除內容,指定打入三方依賴庫,指定輸出的功能
使用方式
apply plugin: 'deep.library'
deep {
aar{
name "{name}_{type}_{flavor}_deep.aar"
path "../out/aar"
holder= [aaa:123,bbb:666]
}
jar{
name "{name}_{type}_{flavor}_deep.jar"
path "../out/jar"
excludeClass=['com/deep/test/exclude.class']
excludePackage=['exclude']
isProguard true
includeJar = ["libs/open_sdk_r5923_lite.jar"]
}
}
複製程式碼
aar中引數說明:
引數 | 描述 | 備註 |
---|---|---|
name | 輸出的aar名字 | 特殊引數與apk一致,這裡不做贅述 |
path | 指定輸出路徑 | |
holder | AndroidManifest指定替換的欄位 | 如上述:將AndroidManifest中的aaa替換成123,bbb替換成666 |
效果如下:
jar中引數說明:
引數 | 描述 | 備註 |
---|---|---|
name | 輸出的jar名字 | 特殊引數與apk一致,這裡不做贅述 |
excludeClass | 打成jar,不包含的檔案 | |
excludePackage | 打成jar 不包含的package | |
isProguard | 是否混淆 | |
prpguardFile | 混淆檔案 | 相對於module路徑的,不設定,預設使用proguard-rules.pro |
includeJar | 需要打入的三方jar |
效果如下:
打包日誌功能
有的時候,我們覺得gradle的打包日誌都是英文很煩,沒用頁也看不懂,沒關係,使用這個功能可以開關日誌,或列印自己需要的日誌。
選擇使用的module,修改build.gradle
import com.deep.DeepLogger
import com.deep.DeepTimeListener
gradle.useLogger(new DeepLogger(true))
gradle.addListener(new DeepTimeListener(true))
複製程式碼
如果不想使用,只需要將引數設定為false即可:
通過這個日誌可以看出沒有Task的耗時,以及對應任務的開始關閉。 在最後會有所有任務的耗時:這些日誌的提示內容都是可以設定:
只需要修改DeepLogger
檔案,這裡面有所有任務的生命週期,只需要插入你想要的log即可。
總結
今天將外掛的所有功能介紹完畢了,如果有需求,也可以給我留言,我會再開一篇文章介紹一下程式碼,方便大家修改程式碼。