【问题标题】:Gradle 6.5 AS 4.1 Setting outputFileName got The value for this property cannot be changed any further errorGradle 6.5 AS 4.1 设置 outputFileName got The value for this property cannot be changed any further error
【发布时间】:2020-11-18 14:00:43
【问题描述】:

我有一个 gradle 任务,当我发布 apk 时会调用它,我这样称呼它:

tasks.whenTaskAdded { task ->
    if (task.name == 'preDeployBuild') {
        task.dependsOn deployTask
    }
}

任务本身是:

task deployTask {
    doFirst {
        versionCode = versionJSON.buildNumber
        latestVersionCode = versionCode
        println "$versionCode"
        versionFile.write(new JsonBuilder(versionJSON).toPrettyString())
        def versionNameRelease = getVersionNameRelease()
        ext.latestVersionName = versionNameRelease
        android.applicationVariants.all { variant ->
            variant.outputs.all {
                println "$versionNameRelease"
                println "$versionCode"
                versionNameOverride = versionNameRelease
                versionCodeOverride = versionCode
                outputFileName = "${appName}_${latestVersionName}.${new Date().format('yyyyMMdd')}.apk"
            }
        }
    }
}

我更新到 Gradle 6.5,这不再起作用,收到此错误:

> The value for this property cannot be changed any further.

在 gradle 任务运行期间更新 versioName versionCode 和 outputFileName 的正确方法是什么?

【问题讨论】:

    标签: android gradle android-gradle-plugin build.gradle


    【解决方案1】:

    遇到同样的问题

          def fileNameCreate = { variant ->
                variant.outputs.all { output ->
                    outputFileName = "epromo-${variant.versionName}(${variant.versionCode})-${variant.baseName}.apk"
                }
            }
    

    outputFileName - Gradle 错误:无法进一步更改此属性的值。

    【讨论】:

      【解决方案2】:

      我是这样解决的

      将任务设为函数并在 buildTypes 块中调用:

          releaseMajor {
                  minifyEnabled false
                  proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                  def startTask =  project.gradle.startParameter.taskNames[0]
                  if(startTask == ':app:assembleReleaseMajor') {
                      increaseMajor()
                      relaseTask()
                  }
              }
      

      并在函数 relaseTask 中做一些事情:

      def relaseTask() {
      ....
          android.applicationVariants.all { variant ->
              variant.outputs.all {
                  println "$versionNameRelease"
                  println "$versionCode"
                  versionNameOverride = versionNameRelease
                  versionCodeOverride = versionCode
                  outputFileName = "${appName}_${latestVersionName}.${new Date().format('yyyyMMdd')}.apk"
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2014-02-23
        • 2022-12-17
        • 2018-04-13
        • 2022-12-26
        • 2020-10-19
        • 2019-11-02
        • 1970-01-01
        • 2012-09-19
        • 1970-01-01
        相关资源
        最近更新 更多