美文网首页
Android Studio plugin 3.0.0 Grad

Android Studio plugin 3.0.0 Grad

作者: 焦百万 | 来源:发表于2018-12-01 16:38 被阅读0次

最近把Android Stuido 升级到了3.2.1 遇到了很多问题,其中 Cannot set the value of read-only property 'outputFile' 就是其中众多问题中的一个,看来得花些时间学习学习这些新技术了,再好的的脑子也不如一个烂笔头,故,做一下笔记记录一下。

文档


Gradle版本不匹配


AS升级到 Android Studio 3.x(Stable 3.0.0 ~ 3.2.1)之后,就会遇到一些版本升级变更问题。收集整理如下:

修改项目下 gradle/wrapper/gradle-wrapper.propertie 文件中的distributionUrl
AS 3.0.0 ~ 3.0.1改为:
distributionUrl=https://services.gradle.org/distributions/gradle-4.1-all.zip
AS 3.1.1 ~ 3.1.4 改为:
distributionUrl=https://services.gradle.org/distributions/gradle-4.4-all.zip
AS 3.2.0 ~ 3.2.x 改为:
distributionUrl=https://services.gradle.org/distributions/gradle-4.6-all.zip

错误


由于将开发工具Android studio 升级了最新的版本,引发的问题。

  • Android Studio 3.2.1
  • Andorid pluing 2.3.2
  • Gradle 4.6

原打包脚本:

android {
    defaultConfig {
       .....
    }

    buildTypes {
       .....
    }
    
    flavorDimensions 'channel','api'

    productFlavors{
        .....
    }

    android.applicationVariants.all { variants ->
        variants.outputs.all { output ->

            outputFileName = "test${releaseTime()}_${defaultConfig.versionName}_${variants.flavorName}.apk"

            def outputFile = output.outputFile
            def timeNow = ""

            if ("true".equals(IS_JENKINS)) {
                if (outputFile != null && outputFile.name.endsWith('.apk')) {
                    // 输出apk名称为boohee_v1.0_2015-0
                    timeNow = BUILD_TIME
//                            timeNow = releaseTime()
                    def fileName = ""
                    if (variants.buildType.name.equals('release')) {
                        fileName = "demo_v${defaultConfig.versionName}_${variants.productFlavors[0].name}_${timeNow}_release.apk"
                    } else if (variants.buildType.name.equals('debug')) {
                        fileName = "demo_v${defaultConfig.versionName}_${variants.productFlavors[0].name}_${timeNow}_debug.apk"
                    }

                    output.outputFile = new File(outputFile.parent, fileName)
                }
            }

            //删除unaligned apk
            if (output.zipAlign != null) {
                output.zipAlign.doLast {
                    output.zipAlign.inputFile.delete();
                }
            }
        }
    }

}

解释

在Andorid 3.0 pluing 中outputFile 属性是只读属性,所以outFile 不能new File重新创建一个File对象。

Error:(56, 0) Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated{apkData=Main{type=MAIN, fullName=debug, filters=[]}} of type com.android.build.gradle.internal.api.ApkVariantOutputImpl.

修改如下:

    android.applicationVariants.all { variants ->
        variants.outputs.all { output ->
            if (outputFileName.endsWith(".apk")){
                if ("debug".equalsIgnoreCase(variants.buildType.name)){
                    outputFileName = "demo_v${defaultConfig.versionName}_${variants.name}_${releaseTime()}_debug.apk"
                }else if ("release".equalsIgnoreCase(variants.buildType.name)){
                    outputFileName = "demo_v${defaultConfig.versionName}_${variants.name}_${releaseTime()}_release.apk"
                }
            }
        }
    }

相关文章

网友评论

      本文标题:Android Studio plugin 3.0.0 Grad

      本文链接:https://www.haomeiwen.com/subject/uwrrcqtx.html