美文网首页
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