无法为ApkVariantOutputImpl_Decorated设置只读属性'outputFile'的值

Add*_*dev 44 android android-gradle-plugin

我在gradle脚本中使用以下代码重命名使用AndroidStudio生成的apks:

applicationVariants.all { variant ->
    variant.outputs.each { output ->
        output.outputFile = new File(output.outputFile.parent, defaultConfig.versionCode + "_" + output.outputFile.name)
    }
}
Run Code Online (Sandbox Code Playgroud)

所以它生成的apks名称如下:345-app-release.apk,其中345是versionCode.

但在更新到AndroidStudio 3.0后,它返回以下错误:

无法为com.android.build.gradle.internal.api.ApkVariantOutputImpl类型的ApkVariantOutputImpl_Decorated {apkData = Main {type = MAIN,fullName = debug,filters = []}}设置只读属性'outputFile'的值.

如何使用新的构建工具实现类似的重命名.

小智 90

output.outputFileName而不是output.outputFile

  • 之后创建错误,我需要像这里一样解决它:/sf/answers/3287133531/ (2认同)

Zum*_*med 21

适用于Studio 3.0+和Gradle 3.0+的解决方案

在Android中更改APK的名称

 android { //add inside the android {}
   ......
   applicationVariants.all { variant ->
       variant.outputs.all {
           def flavor = variant.name
           def versionName = variant.versionName
           outputFileName = "prefix_${flavor}_${versionName}.apk"
       }
   }
}
Run Code Online (Sandbox Code Playgroud)

  • 设置输出文件名获取此错误时,不支持绝对路径 (16认同)

Nab*_*him 11

试试这段代码:

buildTypes {

       applicationVariants.all { variant ->
            variant.outputs.each { output ->
                def name = "myapp_v${variant.versionName}(${variant.versionCode}).apk"
                output.outputFileName = name
            }
        }

    }
Run Code Online (Sandbox Code Playgroud)


Gha*_*yma 7

在gradle中或之后3.1.0

尝试下面的代码

    applicationVariants.all { variant ->
        variant.outputs.all { output ->
            outputFileName = new File(
                    "release_build", // here you can change the name
                    output.outputFile.name)
        }
}
Run Code Online (Sandbox Code Playgroud)