Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated
2017-12-08 16:08
796 查看
今天升级了AS3.0以后,在项目编译的时候发现Gradle中报错了,错误如下:
Error:(60, 0) Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated{apkData=Main{type=MAIN, fullName=xiaomiRelease, filters=[]}} of type com.android.build.gradle.internal.api.ApkVariantOutputImpl.
<a href="openFile:E:\Studio\MyApplication\CodeBook\build.gradle">Open File</a>
经过一番折腾,网上找大牛的解读,弄明白了output.outputFile变成了只读属性,不能再往里面写东西了,以下是3.0之前的配置:
applicationVariants.all { variant -> //批量修改Apk名字
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk') && 'release'.equals(variant.buildType.name)) {
def fileName = outputFile.name.replace("${variant.flavorName}", "V${defaultConfig.versionName}-${variant.flavorName}")
fileName = fileName.replace('.apk', "-${buildTime()}.apk")
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
下面是经过修改之后3.0里面批量修改APK名字的配置:
applicationVariants.all { variant -> //批量修改Apk名字
variant.outputs.all { output ->
if (!variant.buildType.isDebuggable()) {
//获取签名的名字 variant.signingConfig.name
//要被替换的源字符串
def sourceFile = "-${variant.flavorName}-${variant.buildType.name}"
//替换的字符串
def replaceFile = "_V${variant.versionName}_${variant.flavorName}_${variant.buildType.name}_${buildTime()}"
outputFileName = output.outputFile.name.replace(sourceFile, replaceFile);
//遗留问题:如何获取当前module的name,如CodeBooke这个名字怎么获取到
}
}
}
问题:对于如何在gradle中获取module的name,还是没有找到相关的方法,希望有知道的大神留言交流。
gradle API:https://developer.android.google.cn/studio/build/gradle-plugin-3-0-0-migration.html#variant_api
这是一个对AS 3.0变化总结比较全的博客:
https://mp.weixin.qq.com/s?__biz=MzAwNzc0NjAxMg==&mid=2653391711&idx=1&sn=821eff3f98ab52fc442c6218794b203e&chksm=80aa53ecb7dddafa522d4ebfdf67af2f473365bb0fa2d50ae6df5d00499926ae0d32a5a448d2&mpshare=1&scene=23&srcid=10308c4ICo7GCwuVc683H6eZ#rd
版权声明:本文为博主原创文章,未经博主允许不得转载。个人习作:http://app.xiaomi.com/detail/75522
Error:(60, 0) Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated{apkData=Main{type=MAIN, fullName=xiaomiRelease, filters=[]}} of type com.android.build.gradle.internal.api.ApkVariantOutputImpl.
<a href="openFile:E:\Studio\MyApplication\CodeBook\build.gradle">Open File</a>
经过一番折腾,网上找大牛的解读,弄明白了output.outputFile变成了只读属性,不能再往里面写东西了,以下是3.0之前的配置:
applicationVariants.all { variant -> //批量修改Apk名字
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk') && 'release'.equals(variant.buildType.name)) {
def fileName = outputFile.name.replace("${variant.flavorName}", "V${defaultConfig.versionName}-${variant.flavorName}")
fileName = fileName.replace('.apk', "-${buildTime()}.apk")
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
下面是经过修改之后3.0里面批量修改APK名字的配置:
applicationVariants.all { variant -> //批量修改Apk名字
variant.outputs.all { output ->
if (!variant.buildType.isDebuggable()) {
//获取签名的名字 variant.signingConfig.name
//要被替换的源字符串
def sourceFile = "-${variant.flavorName}-${variant.buildType.name}"
//替换的字符串
def replaceFile = "_V${variant.versionName}_${variant.flavorName}_${variant.buildType.name}_${buildTime()}"
outputFileName = output.outputFile.name.replace(sourceFile, replaceFile);
//遗留问题:如何获取当前module的name,如CodeBooke这个名字怎么获取到
}
}
}
问题:对于如何在gradle中获取module的name,还是没有找到相关的方法,希望有知道的大神留言交流。
gradle API:https://developer.android.google.cn/studio/build/gradle-plugin-3-0-0-migration.html#variant_api
这是一个对AS 3.0变化总结比较全的博客:
https://mp.weixin.qq.com/s?__biz=MzAwNzc0NjAxMg==&mid=2653391711&idx=1&sn=821eff3f98ab52fc442c6218794b203e&chksm=80aa53ecb7dddafa522d4ebfdf67af2f473365bb0fa2d50ae6df5d00499926ae0d32a5a448d2&mpshare=1&scene=23&srcid=10308c4ICo7GCwuVc683H6eZ#rd
版权声明:本文为博主原创文章,未经博主允许不得转载。个人习作:http://app.xiaomi.com/detail/75522
相关文章推荐
- Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated{apkData=M
- Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated
- Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated{apkData=M
- Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated{apkData=
- Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated{apkData=M
- Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated
- Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated
- Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated
- Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated
- Error:Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated{apk
- Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated{apkData=M
- Android Studio3.0报错:Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl
- android studio3.0 编译 Cannot set the value of read-only property 'outputFile' for apkVariantOutputImp
- “Cannot set the value of read-only property 'outputFile' for 。。。”解决
- Error:(45, 0) Cannot set the value of read-only property 'outputFile' for ...
- android studio3.0(二)Cannot set the value of read-only property 'outputFile'
- Cannot set the value of read-only property 'outputFile'
- Cannot set the value of read-only property 'outputFile'
- Android Gradle 3.0.0-alpha2 plugin, Cannot set the value of read-only property 'outputFile'
- Can not set the value of read-only property 'jniFolders' for task ': android: packageDebug