8

我正在使用 Gradle 编译我的 Android 项目:

buildTypes {
    release {
        signingConfig signingConfigs.release 
        applicationVariants.all { variant ->
            def file = variant.outputFile
            def fileName = file.name
            fileName = fileName.replace(".apk", "-renamed.apk")
            variant.outputFile = new File(file.parent, fileName)
        }
    }
}

并非所有输出文件都被重命名,它总是跳过 1 个文件。为什么?

myapp-debug-unaligned-renamed.apk    <-renamed, OK!
myapp-release.apk                    <-NOT renamed, WRONG!
myapp-release-unaligned-renamed.apk  <-renamed, OK!
4

3 回答 3

17

我用这段代码解决了:

buildTypes {
    release {
        signingConfig signingConfigs.release 
    }

    applicationVariants.all { variant ->
        def apk = variant.packageApplication.outputFile;
        def newName = apk.name.replace(".apk", "-renamed.apk");
        variant.packageApplication.outputFile = new File(apk.parentFile, newName);
        if (variant.zipAlign) {
            variant.zipAlign.outputFile = new File(apk.parentFile, newName.replace("-unaligned", ""));
        }
    }
}

该块applicationVariants.all {...}现在位于该release {...}块之外。

我认为variant.zipAlign.outputFile有所作为。

于 2013-09-05T13:17:45.740 回答
4

使用 build.gradle 配置时应该有 3 个输出 APK 文件:调试未签名未对齐、发布签名对齐和发布签名未对齐。applicationVariant处理输出文件有两个变量: outputFilepackageApplication.outputFile,前者用于 zipalign,后者用于一般情况。

所以重命名所有文件的正确方法是这样的:

android.applicationVariants.all { variant ->
    if (variant.zipAlign) {
        def oldFile = variant.outputFile;
        def newFile = oldFile.name.replace(".apk", "-renamed.apk")
        variant.outputFile = new File(oldFile.parent, newFile)
    }

    def oldFile = variant.packageApplication.outputFile;
    def newFile = oldFile.name.replace(".apk", "-renamed.apk")
    variant.packageApplication.outputFile = new File(oldFile.parent, newFile)
}
于 2013-09-05T09:35:38.657 回答
-1

我通过删除您的一条线来简化它,但本质上您需要像这样更改它:

android {

    buildTypes {
    ...
    }

    applicationVariants.all { variant ->
        def file = variant.outputFile
        def fileName = file.name.replace(".apk", "-renamed".apk")
        variant.outputFile = new File(file.parent, fileName)
    }
}
于 2013-09-04T06:23:48.840 回答