【问题标题】:Android Gradle: Cannot set the value of read-only property 'outputFile'Android Gradle:无法设置只读属性“outputFile”的值
【发布时间】:2019-09-12 08:47:33
【问题描述】:

我通过 sunmi 打印机从 github 下载了一个 Android 项目,以测试我的 pos 打印机,但是当开始构建和 sync project 它给了我这个 gradle error

错误:无法为类型的 ApkVariantOutputImpl_Decorated{apkData=Main{type=MAIN, fullName=debug, filters=[], versionCode=9, versionName=v2.7.2}} 设置只读属性“outputFile”的值com.android.build.gradle.internal.api.ApkVariantOutputImpl.

这里是 Gradle:

apply plugin: 'com.android.application'

android {
    signingConfigs {
        release {
            keyAlias 'key0'
            keyPassword '123456'
            storeFile file('../app/temp.jks')
            storePassword '123456'
        }
        debug {
            keyAlias 'key0'
            keyPassword '123456'
            storeFile file('../app/temp.jks')
            storePassword '123456'
        }
    }

    compileSdkVersion 23
    buildToolsVersion "23.0.3"
    defaultConfig {
        applicationId "com.test.printertestdemop1"
        minSdkVersion 21
        targetSdkVersion 23
        versionCode 9
        versionName "v2.7.2"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    lintOptions {
        abortOnError false
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
    }

    android.applicationVariants.all {
        variant ->
            variant.outputs.each {
                output -> output.outputFile = new File(output.outputFile.parent, "PrinterDemo_" + defaultConfig.versionName + "_P1.apk");
            }
    }


}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:23.3.0'
    implementation 'com.android.support:recyclerview-v7:23.3.0'
    implementation 'com.sunmi:sunmiui:latest.release'
    implementation files('libs/core-3.3.0.jar')
}

【问题讨论】:

  • 注释掉android.applicationVariants.all 代码块,它将正常工作。问题是由于 Gradle API 更改,输出文件对象的 setter 方法已删除。
  • 把它设置为答案兄弟,这样我就可以添加一个积极的反馈,它的工作!

标签: android gradle


【解决方案1】:

根据This reference的说法,variant的输出没有提供setter方法来设置输出文件名。所以它不适用于较新版本的 Gradle API

解决方案:您可以在 defaultConfig 块中使用 setProperty() 方法来设置更改基本 apk 名称之类的,

defaultConfig {
    ....
    setProperty("archivesBaseName", "your apk name here")
    ....
}

【讨论】:

    猜你喜欢
    • 2017-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-29
    • 2018-01-31
    • 2020-01-02
    相关资源
    最近更新 更多