Android Studio/gradle动态apk名称不同步

Rya*_*ick 7 android gradle android-studio

我希望在每个构建中使用日期/时间(yyMMddHHmm)动态命名APK.我已完成此操作并且gradle构建并正确命名APK,但Android Studio无法获取正确的名称以尝试推送到设备.

关于这个主题有一个问题,有一些好的信息,确认问题,并且在每次构建之前需要手动同步. 当Gradle具有自定义逻辑更改APK名称时,Android Studio会将无菌APK上传到设备

完整的图片是我的build.gradle

android {
   compileSdkVersion 22
   buildToolsVersion "22.0.1"

   // grab the date/time to use for versionCode and file naming
   def date = new Date();
   def clientBuildDate = date.format('yyMMddHHmm')

   // for all client files, set the APK name
   applicationVariants.all { variant ->
    variant.outputs.each { output ->
        output.outputFile = new File(output.outputFile.parent, "myapp-" + versionName.replace(".","_") + "-" + clientBuildDate + ".apk")
    }
   }
   ....
   defaultConfig{...}
   buildTypes{...}
   compileOptions{...}
   signingConfigs{...}
  }
Run Code Online (Sandbox Code Playgroud)

以上将生成如下输出:

myapp-1_0_0-1507021343.apk
myapp-1_0_0-1507021501.apk
myapp-1_0_0-1507021722.apk
Run Code Online (Sandbox Code Playgroud)

但Android工作室总是会尝试将第一个版本加载到手机中,因为它不同步,并且在每次构建后都不知道名称更改.

有没有关于如何在每个Android工作室的构建/运行中强制同步的建议?在构建之前手动执行同步是一个显示停止,并且需要我回到默认的APK命名方案.

使用:AS 1.2.1.1&'com.android.tools.build:grad:1.2.3'

Tom*_*itt 3

另一种选择是让 CI 服务器提供您的外部发布版本(无论如何它们都应该是),然后将以下内容添加到您的build.gradle

apply plugin: 'com.android.application'
...
def isCIBuild() {
    return System.getenv('CI_BUILD') != null || hasProperty('CI_BUILD');
}
...
android {
...

    if(isCIBuild()){
        def clientBuildDate = new Date().format('yyMMddHHmm')
        applicationVariants.all { variant ->
            variant.outputs.each { output ->
                output.outputFile = new File(output.outputFile.parent, "myapp-" + versionName.replace(".","_") + "-" + clientBuildDate + ".apk")
            }
        }
    }
...
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以在 CI 服务器上设置全局环境变量CI_BUILD,这将触发 APK 重命名,但 Android Studio 将使用通常命名的 APK。

如果您想运行本地构建并重命名 APK,则通过命令行构建并添加-PCI_BUILD=true

./gradlew clean assemble -PCI_BUILD=true