我在gradle脚本中使用以下代码重命名使用AndroidStudio生成的apks:
applicationVariants.all { variant ->
variant.outputs.each { output ->
output.outputFile = new File(output.outputFile.parent, defaultConfig.versionCode + "_" + output.outputFile.name)
}
}
所以它生成的apks名称如下: 345-app-release.apk ,其中345是versionCode。
但在更新到AndroidStudio 3.0后,它会返回以下错误:
无法设置只读属性的值" outputFile'对于 ApkVariantOutputImpl_Decorated {apkData = Main {type = MAIN,fullName = debug, filters = []}}类型 com.android.build.gradle.internal.api.ApkVariantOutputImpl。
如何使用新的构建工具实现类似的重命名。
答案 0 :(得分:77)
使用output.outputFileName
代替output.outputFile
答案 1 :(得分:8)
尝试此代码:
buildTypes {
applicationVariants.all { variant ->
variant.outputs.each { output ->
def name = "myapp_v${variant.versionName}(${variant.versionCode}).apk"
output.outputFileName = name
}
}
}
答案 2 :(得分:4)
在gradle 3.1.0中或之后
尝试以下代码
discard
答案 3 :(得分:1)
在我的情况下,我通过拒绝更新到Gradle 4.4(在我的情况下)来解决它。所以当Studio询问时(当你第一次打开你的项目时)你更新Gradle以支持即时运行等等拒绝,你应该没事。
答案 4 :(得分:0)
将您的代码更改为: -
applicationVariants.all { variant ->
variant.outputs.each { output ->
output.outputFile = new File(output.outputFile.parent, "${variant.applicationId}-${variant.versionName}.apk")
}
}
答案 5 :(得分:0)
对我有用的是 1.将每个更改为“全部” 2.将 output.outputFile 更改为“ outputFileName” 3.在终端中运行 $。/ gradlew clean build 。
例如,如果您的artifacts.gradle设置为:
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
def finalVersionCode = 10000 + versionCode
output.versionCodeOverride = finalVersionCode
output.outputFile = new File(
output.outputFile.parent, output.outputFile.name.replace(".apk","-${finalVersion}.apk"))
}
}
然后您要将其更改为此:
android.applicationVariants.all { variant ->
variant.outputs.all { output ->
def finalVersionCode = 10000 + versionCode
output.versionCodeOverride = finalVersionCode
outputFileName = new File(
output.outputFile.parent,
outputFileName.replace(".apk", "-${finalVersionCode}.apk"))
}
}