packer-ng-plugin是一个快速生成渠道包的工具,android使用的apk包的压缩方式是zip,与zip有相同的文件结构,在zip的Central directory file header中包含一个File comment区域,可以存放一些数据。File comment是zip文件如果可以正确的修改这个部分,就可以在不破坏压缩包、不用重新打包的的前提下快速的给apk文件写入自己想要的数据。 不同于在build.gradle设置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文件,一个渠道一行如图
四、配置好android环境和Gradle环境类似配置java环境
不做解释网上搜吧
五、在Terminal中一行指令生成渠道包
gradlew -Pmarket=markets.txt clean apkRelease
注:渠道包在项目的build\apks里。
六、渠道获取方法
String market = PackerNg.getMarket(Context)
七、注意事项
加固后渠道信息就取不到了,需要重新写入渠道。
猜测可能加固工具(360、乐固等)时不光干掉了签名,也干掉了通过该方法写入的渠道信息。
更详细的配置请参考github开源项目packer-ng-plugin