集成AndResGuard
多渠道打包
我使用的是packer-ng-plugin, 該打包工具打包速度非???。
- 新建一個(gè)
markets.txt文件,按行分隔聲明渠道名稱。 - 下載
packer-ng-plugin的打包tools,我這使用的是Python腳本 - 復(fù)制PackerNg.java到項(xiàng)目中
- 在
app.gradle中編寫(xiě)打包方法
def packageChannel(String releaseApk) {
try {
def stdout = new ByteArrayOutputStream()
exec {
//執(zhí)行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";
}
}
- 在資源混淆結(jié)束后執(zhí)行打包方法, 具體的
fileName以實(shí)際指定輸出結(jié)果為準(zhǔn),AndResGuard的目錄為"AndResGuard_" +releaseApkName
project.afterEvaluate {
//在Release后執(zhí)行資源混淆,然后多渠道打包
//打包命令 ./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)
}
}
}
}
- 運(yùn)行
在命令行中輸入gradle clean resguard即可成功得到混淆后的多渠道包
結(jié)合友盟統(tǒng)計(jì)
// 獲取渠道
final String channel = PackerNg.getMarket(this);
AnalyticsConfig.setChannel(channel);