如何为产品风味自定义APK文件名?

52

我正在通过build.gradle脚本自定义我的Android应用程序的APK文件名称,如下所示:

android {
    defaultConfig {
        project.ext.set("archivesBaseName", "MyApplication");
    }
}

现在我正在使用产品风味:

android {
    productFlavors {
        green {
            applicationId "com.example.myapplication.green"
        }

        blue {
            applicationId "com.example.myapplication.blue"
        }
    }
}

有没有一种方法可以自定义每个APK的名称?我尝试过archiveBaseNamebaseName,但都没有成功。最终我想得到以下文件:

build/outputs/apk/Blue-debug-1.2.1.apk
build/outputs/apk/Blue-debug-unaligned.apk
build/outputs/apk/Blue-release-1.2.1.apk
build/outputs/apk/Blue-release-unaligned.apk
build/outputs/apk/Green-debug-1.2.1.apk
build/outputs/apk/Green-debug-unaligned.apk
build/outputs/apk/Green-release-1.2.1.apk
build/outputs/apk/Green-release-unaligned.apk
12个回答

0
我正在使用以下代码,以避免文件互相覆盖:
applicationVariants.all { variant ->
    variant.outputs.each { output ->
        def newApkName = variant.name + "-" + variant.versionName + "(" + variant.versionCode +")" + ".apk";
        output.outputFile = new File("${project.projectDir}/outputs/apk/" + variant.name, newApkName);
    }
}

0

这里的每个答案都是相同且过时的。做[flavor]-[version]-[build type]很容易:

android {
    productFlavors {
        green {
            applicationId "com.example.myapplication.green"
            setProperty("archivesBaseName", "Green-" + defaultConfig.versionName)
        }

        blue {
            applicationId "com.example.myapplication.blue"
            setProperty("archivesBaseName", "Blue-" + defaultConfig.versionName)
        }
    }
}

如果你的 versionName 是 "1.2.1",运行 gradle assemble 将会产生以下结果:

Green-1.2.1-debug.apk

Green-1.2.1-release.apk

Blue-1.2.1-debug-apk

Blue-1.2.1-release.apk


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接