多渠道打包与AndResGuard的结合实践

集成AndResGuard

参见AndResGuard文档

多渠道打包

我使用的是packer-ng-plugin, 该打包工具打包速度非常快。

  1. 新建一个markets.txt文件,按行分隔声明渠道名称。
  2. 下载packer-ng-plugin的打包tools,我这使用的是Python 脚本
  3. 复制PackerNg.java到项目中
  4. 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";
    }
}
  1. 在资源混淆结束后执行打包方法, 具体的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)
            }
        }
    }
}
  1. 运行
    在命令行中输入gradle clean resguard即可成功得到混淆后的多渠道包

结合友盟统计

// 获取渠道
final String channel = PackerNg.getMarket(this);
AnalyticsConfig.setChannel(channel);

你可能感兴趣的:(多渠道打包与AndResGuard的结合实践)