集成AndResGuard
多渠道打包
我使用的是packer-ng-plugin, 该打包工具打包速度非常快。
- 新建一个
markets.txt
文件,按行分隔声明渠道名称。 - 下载
packer-ng-plugin
的打包tools
,我这使用的是Python
脚本 - 复制PackerNg.java到项目中
- 在
app.gradle
中编写打包方法
def packageChannel(String releaseApk) {
try {
def stdout = new ByteArrayOutputStream()
exec {
//执行python脚本打多渠道包
commandLine 'python', rootProject.getRootDir().getAbsolutePath() + "/app/ngpacker.py", releaseApk, "./markets.txt", rootProject.getRootDir().getAbsolutePath() + "/build/archives"
standardOutput = stdout
}
return stdout.toString().trim()
}catch (ignored) {
return "UnKnown";
}
}
- 在资源混淆结束后执行打包方法, 具体的
fileName
以实际指定输出结果为准,AndResGuard
的目录为"AndResGuard_" +releaseApkName
project.afterEvaluate {
//在Release后执行资源混淆,然后多渠道打包
//打包命令 ./gradlew resguard
tasks.getByName("resguard") {
it.doLast {
println 'channel package task begin'
def oldName = VERSIO_NNAME +"_${releaseTime()}_release"
def fileName = oldName + "_signed_7zip_aligned.apk"
def rApk = new File("app/build/outputs/apk/AndResProguard_" + oldName+ "/" + fileName)
if (rApk.exists()) {
println 'resGuard apk exits begin channel package'
packageChannel(rApk.absolutePath)
}
}
}
}
- 运行
在命令行中输入gradle clean resguard
即可成功得到混淆后的多渠道包
结合友盟统计
// 获取渠道
final String channel = PackerNg.getMarket(this);
AnalyticsConfig.setChannel(channel);