如何在Gradle(Android Studio)中通过构建类型定义字符串并替换文件名

如何在Gradle(Android Studio)中通过构建类型定义字符串并替换文件名,android,gradle,android-gradle-plugin,Android,Gradle,Android Gradle Plugin,我想用指定的生成类型替换生成的APK的名称: android { buildTypes { def String proguard release { minifyEnabled false zipAlignEnabled true proguard = "noproguard" } releaseProguard { minifyEnabled true

我想用指定的生成类型替换生成的APK的名称:

android {
   buildTypes {
      def String proguard

      release {
         minifyEnabled false
         zipAlignEnabled true
         proguard = "noproguard"
      }

      releaseProguard {
         minifyEnabled true
         proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'

         zipAlignEnabled true
         proguard = "proguard"
      }

   }

   // Replace the file names
   android.applicationVariants.all { variant ->
        variant.preBuild.doLast {
            variant.outputs.each { output ->
                output.outputFile = new File(
                        output.outputFile.parent,
                        output.outputFile.name.replace(".apk", "-${variant.versionName}-${variant.versionCode}-" + proguard +.apk"))
            }
        }
    }
}
但是,如果我用“release”创建一个签名的APK,我不会在APK的文件名中得到“noprogragard”字符串,它会被上一个构建类型:releaseProguard覆盖

预期输出发布: app-qa-release-1.3.1-noprguard.apk


预期输出releaseProguard:app-qa-release-1.3.1-proguard.apk

它不完全是您想要的

您可以使用
build.gradle
设置此属性:

android {
    //...

    defaultConfig {
        //...
        project.ext.set("archivesBaseName", "XXXX_" + defaultConfig.versionCode);
    }
}
分配
archivesBaseName
您将获得如下结果:

xxxx_0.9.6-flavorName-buildType.apk
您可以在flavor块中使用此选项来指定特定值


此属性需要gradle插件
1.3.1
或更高版本。

您的意思是可以为versionCode分配任意字符串值,并将其反映在apk名称中吗?@RaGe No。您可以为archivesBaseName分配任意值,该值将作为“-flavorName buildType.apk”之前名称的前缀。当然,您可以编写任务来重命名最终的apk,但这是android gradle插件中的内置功能。