packer-ng-plugin是一個快速生成渠道包的工具,android使用的apk包的壓縮方式是zip,與zip有相同的文件結(jié)構(gòu),在zip的Central directory file header中包含一個File comment區(qū)域,可以存放一些數(shù)據(jù)。File comment是zip文件如果可以正確的修改這個部分,就可以在不破壞壓縮包、不用重新打包的的前提下快速的給apk文件寫入自己想要的數(shù)據(jù)。 不同于在build.gradle設(shè)置productFlavors需要多次編譯,該方式只需要build一次,所以效率很高。集成方式如下:
一、項目根目錄的 build.gradle
buildscript {
......
dependencies{
// add packer-ng
classpath 'com.mcxiaoke.gradle:packer-ng:1.0.9'
}
}
二、在app\build.gradle中添加
apply plugin: 'packer'
packer {
checkSigningConfig = true
checkZipAlign = true
// archiveNameFormat = '${appPkg}-${flavorName}-${buildType}-v${versionName}-${versionCode}-${fileMD5}'
archiveNameFormat = 'yidu-${flavorName}-${buildType}-v${versionName}-${versionCode}'
archiveOutput = file(new File(project.rootProject.buildDir.path, "myapks"))
}
dependencies {
//打包工具
compile 'com.mcxiaoke.gradle:packer-helper:1.0.9'
}
android {
//...
signingConfigs {
debug {
storeFile file("text.jks")
storePassword "123456"
keyAlias "text_app"
keyPassword "123456"
v2SigningEnabled false
}
release {
storeFile file("text.jks")
storePassword "123456"
keyAlias "text_app"
keyPassword "123456"
v2SigningEnabled false
}
}
}
三、在項目根目錄下新建一個markets.txt文件,一個渠道一行如圖
image
四、配置好android環(huán)境和Gradle環(huán)境類似配置java環(huán)境
不做解釋網(wǎng)上搜吧
五、在Terminal中一行指令生成渠道包
gradlew -Pmarket=markets.txt clean apkRelease
注:渠道包在項目的build\apks里。
六、渠道獲取方法
String market = PackerNg.getMarket(Context)
七、注意事項
加固后渠道信息就取不到了,需要重新寫入渠道。
猜測可能加固工具(360、樂固等)時不光干掉了簽名,也干掉了通過該方法寫入的渠道信息。
更詳細(xì)的配置請參考github開源項目packer-ng-plugin