Android Gradle:applicationVariants.all跳过一个变体

Android Gradle:applicationVariants.all跳过一个变体,android,gradle,Android,Gradle,我正在使用Gradle编译我的Android项目: buildTypes { release { signingConfig signingConfigs.release applicationVariants.all { variant -> def file = variant.outputFile def fileName = file.name fileName = f

我正在使用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!

myapp-debug-unaligned-renamed.apk我通过删除您的一行代码简化了它,但实际上您需要这样更改它:

android {

    buildTypes {
    ...
    }

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

当使用build.gradle配置时,应该有3个输出APK文件:debug unsigned unaligned、release signed aligned和release signed unaligned。
applicationVariant
有两个变量来处理输出文件:outputFilepackageApplication.outputFile,前者用于zipaign,后者用于一般情况

因此,重命名所有文件的正确方法如下:

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)
}

我使用以下代码解决了这个问题:

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
起作用。

从buildTypes{}块中取出代码并不能解决问题。现在variant已经有了outputFiles(复数)。gradle插件的1.0.0版本改变了语法。请参见此处的更新解决方案: