如何在Gradle(Android Studio)中按构建类型定义String并替换文件名

时间:2016-02-19 09:52:06

标签: android gradle android-gradle

我想用指定的构建类型替换生成的apks的名称:

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

但是,如果我使用"发布"制作已签名的APK,我就没有获得" noproguard"在APK文件名中的字符串,它被最后一个构建类型覆盖:releaseProguard。

预期输出发布: APP-QA-释放1.3.1-noprguard.apk

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

1 个答案:

答案 0 :(得分:2)

这并不是你想要的。

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

android {
    //...

    defaultConfig {
        //...
        project.ext.set("archivesBaseName", "XXXX_" + defaultConfig.versionCode);
    }
}

分配archivesBaseName您将获得类似的内容:

xxxx_0.9.6-flavorName-buildType.apk

您可以在flavor块中使用它来指定特定值。

此属性需要gradle-plugin 1.3.1或更高版本。