我希望在每个版本中使用日期/时间(yyMMddHHmm)动态命名APK。我已完成此操作并且gradle构建并正确命名APK,但Android Studio无法获取正确的名称以尝试推送到设备。
关于这个主题有一个问题,有一些好的信息,确认问题,并且在每次构建之前需要手动同步。 Android Studio uploads sterile APK to device when Gradle has custom logic changing APK names
完整的图片是我的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{...}
}
以上将生成如下输出:
myapp-1_0_0-1507021343.apk
myapp-1_0_0-1507021501.apk
myapp-1_0_0-1507021722.apk
但是Android Studio总是会尝试将第一个版本加载到手机中,因为它不同步,并且在每次构建后都不知道名称更改。
是否有关于如何强制在Android工作室的每个构建/运行中同步的建议?在构建之前手动执行同步是一个显示停止,并且需要我回到默认的APK命名方案。
使用:AS 1.2.1.1& 'com.android.tools.build:gradle:1.2.3'
答案 0 :(得分: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")
}
}
}
...
}
然后,您可以在CI服务器上设置全局环境变量CI_BUILD
,这将触发APK重命名,但Android Studio将使用通常命名的APK。
如果您想运行本地版本并重命名APK,请通过命令行构建并添加-PCI_BUILD=true
./gradlew clean assemble -PCI_BUILD=true