shwenzhang / AndResGuard

proguard resource for Android by wechat team
Apache License 2.0
8.54k stars 1.54k forks source link

Gradle插件目前不支持多渠道打包? #37

Closed c1024 closed 8 years ago

c1024 commented 8 years ago

我用最新的gralde插件,运行andresguard/generate task 只生成一个压缩apk。我的配置里面是有多个productFlavor。目前是不支持同时压缩多个吗?

simpleton commented 8 years ago

嗯,多flavor现在确实还不支持。下个版本会支持。

PS: 不过单纯的渠道包感觉用flavor会比较慢

w4lle commented 8 years ago

用的美团的多渠道打包方案,请问支持吗? @simpleton

simpleton commented 8 years ago

@w4lle 这个工具的输入 输出都是一个apk文件,可以在资源混淆后再打渠道包。

w4lle commented 8 years ago

好的,多谢 @simpleton

nianzixin commented 8 years ago

@simpleton 怎么个先资源混淆,再打渠道包的方案?

simpleton commented 8 years ago

@nianzixin https://github.com/GavinCT/AndroidMultiChannelBuildTool

w4lle commented 8 years ago

接楼上,使用该方案自动化打包 build.gradle

    project.afterEvaluate {
        //在Release后执行资源混淆,然后多渠道打包
        //打包命令 ./gradlew resguard
        tasks.getByName("resguard") {
            it.doLast {
                print 'channel package task begin'
                def fileName = ***
                def rApk = new File("app/build/outputs/apk/AndResProguard/" + fileName)
                if (rApk.exists()) {
                    print 'resGuard apk exits begin channel package'
                    packageChannel(rApk.absolutePath)
                }
            }
        }
    }

def packageChannel(String releaseApk) {
    try {
        def stdout = new ByteArrayOutputStream()
        exec {
            //执行python脚本打多渠道包
            commandLine 'python', rootProject.getRootDir().getAbsolutePath() + "/app/multi_build.py", releaseApk
            standardOutput = stdout
        }
        return stdout.toString().trim()
    }
    catch (ignored) {
        return "UnKnown";
    }
}

大家可以参考 @simpleton @nianzixin

nianzixin commented 8 years ago

@w4lle def fileName = *\ ,这个三个星是怎么回事?帮忙解释一下

w4lle commented 8 years ago
release {
            applicationVariants.all { variant ->
                variant.outputs.each { output ->
                    def outputFile = output.outputFile
                    if (outputFile != null && outputFile.name.endsWith('.apk')) {
                        //***就是自定义的文件名
                        def fileName = "app_v${defaultConfig.versionName}_${releaseTime()}.apk"
                        output.outputFile = new File(outputFile.parent, fileName)
                    }
                }
            }
        }

@nianzixin

nianzixin commented 8 years ago

@w4lle 刚刚那个问题我解决了,可又出现新问题了,帮忙给个demo呗

nianzixin commented 8 years ago

@w4lle 能加个QQ好友么?

w4lle commented 8 years ago

有问题在这里讨论吧,大家都能看到 @nianzixin

shwenzhang commented 8 years ago

把渠道信息放在apk的zip comment的做法会比较好,比较快一点

nianzixin commented 8 years ago

@shwenzhang comment我实践了可以,但是能把你这个混淆的和那个comment多渠道打包的结合一下么?我在gradle中运行命令就可以生成多渠道混淆后的包了。

nianzixin commented 8 years ago

@w4lle 我有点不明白,你做的这先资源混淆,然后又多渠道打包?这多渠道打出来的所有包都资源混淆了么?

shwenzhang commented 8 years ago

@nianzixin, 个人感觉一个库完成一个功能就可以,自动打渠道信息到comment美团那个库好像可以work?

w4lle commented 8 years ago

@nianzixin 是的。

c1024 commented 8 years ago

有什么办法能结合packer-ng-plugin (https://github.com/mcxiaoke/packer-ng-plugin) 打包渠道包?packer-ng-plugin打包渠道包很快

simpleton commented 8 years ago

@c1024 由于AndResGuard的task执行先于打渠道包的task,我这边不是很好适配。只要渠道包可以指定input apk的路径,就可以很容易的一起work.

c1024 commented 8 years ago

@simpleton AndResGuard task 如果有多个product flavor ,是用哪个product flavor执行,有没有规则?

simpleton commented 8 years ago

@c1024 使用了默认的release

c1024 commented 8 years ago

@simpleton 您说的是buildtype。我是说product flavor

simpleton commented 8 years ago

@c1024 抱歉,没有描述清楚。是buildtype,我没有写读取product flavor相关的信息。会对你做集成造成困扰么?

c1024 commented 8 years ago

@simpleton 我是想知道多个product flavor,是执行哪个product flavor?还是都执行?

simpleton commented 8 years ago

这个问题已经修复,会发布在1.1.6版本。 执行所有的release variant。

simpleton commented 8 years ago

这里先关闭了,有问题请重新打开。

feel free to reopen if the issue still existed.

nick1Jian commented 8 years ago

@simpleton 有沒有辦法指定 release variant? 想把它包到jenkins機器上 全部favor都build要很久....

simpleton commented 8 years ago

@nick1Jian 暂时是编译了所有release variant,不能指定特定的。下个release我会增加这个功能。

simpleton commented 8 years ago

106 #79

simpleton commented 8 years ago

@nick1Jian 可以升级到1.1.14尝试下,resguard_和assemble_的task对齐了。

mr-woody commented 8 years ago

@nianzixin AndResGuard多渠道打包的问题,你处理清楚了么?要是有解决思路分享下,我这边按照你们上面的评论信息,始终没有一个完整的流程,关键地方缺失。总是成功不了!

simpleton commented 8 years ago

@18511084155 由于大家打包多渠道的思路不一致,有的使用的是Flavor,有的使用增加非签名的特殊文件。这里需要各个开发者去适配自己的方案。

总的来讲AndResGuard和多渠道并没有强依赖,可以是多渠道的结果输入到AndResGuard也可以是AndResGuard的结果输入到多渠道工具。