環境
- Android打包工具:packer-ng (v2.0.1)
packer-ng 項目介紹
packer-ng-plugin 是Android渠道打包工具Gradle插件,支持極速打包,可方便的用于CI系統集成,同時提供命令行打包腳本,渠道讀取提供Python和C語言的實現。
修改項目配置
// build.gradle
buildscript {
dependencies{
classpath 'com.mcxiaoke.packer-ng:plugin:2.0.1'
}
}
修改模塊配置
apply plugin: 'packer'
// build.gradle
dependencies {
implementation 'com.mcxiaoke.packer-ng:helper:2.0.1'
}
插件配置示例
packer {
archiveNameFormat = '${buildType}-v${versionName}-${channel}'
archiveOutput = new File(project.rootProject.buildDir, "apks")
channelList = ['Channel1', 'Channel2', 'Channel3']
// channelFile = new File(project.rootDir, "markets.txt")
// channelMap = [
// "Cat" : project.rootProject.file("channels/cat.txt"),
// "Dog" : project.rootProject.file("channels/dog.txt"),
// "Fish": project.rootProject.file("channels/channels.txt")
// ]
}
- archiveNameFormat - 指定最終輸出的渠道包文件名的格式模版,詳細說明見后面,默認值是
${appPkg}-${channel}-${buildType}-v${versionName}-${versionCode}
(可選) - archiveOutput - 指定最終輸出的渠道包的存儲位置,默認值是
${project.buildDir}/archives
(可選) - channelList - 指定渠道列表,List類型,見示例
- channelMap - 根據productFlavor指定不同的渠道列表文件,見示例
- channelFile - 指定渠道列表文件,File類型,見示例
注意:channelList
/ channelMap
/ channelFile
不能同時使用,根據實際情況選擇一種即可,三個屬性同時存在時優先級為: channelList
> channelMap
> channelFile
,另外,這三個屬性會被命令行參數 -Pchannels
覆蓋。
通過母包構建渠道包
- 格式
java -jar tools/packer-ng-2.0.1.jar generate --channels=<渠道1>,<渠道2>,<渠道3> --output=<輸出路徑><空格><母包apk完整路徑>
- 示例
java -jar tools/packer-ng-2.0.1.jar generate --channels=Huawei,Xiaomi,Ali --output=/Users/cary/Documents/test/apk/build/archives /Users/cary/Documents/test/apk/app-release.apk
app通過代碼獲取渠道名
String channel = PackerNg.getChannel(<Context>);
校驗apk簽名
- 格式
jarsigner -verify -verbose -certs <apk完整路徑>
- 示例
jarsigner -verify -verbose -certs /Users/cary/Documents/test/apk/build/archives/app-release-Ali.apk