gradle 使用buildConfigField修复“生成类型包含自定义BuildConfig字段,但该功能已禁用”错误

cbwuti44  于 2022-12-04  发布在  其他
关注(0)|答案(1)|浏览(475)

在新版Android Studio(火烈鸟|2022.2.1 Canary 9),使用org.jetbrains.Kotlin(1.8.0-Beta)插件和8.0.0-alpha 09 gradle插件,一个新的构建版本突然出现此错误:
组建类型'release'包含自订BuildConfig字段,但此功能已停用。
有什么办法能让这件事过去吗

oxiaedzo

oxiaedzo1#

回答我自己的问题--有一个快速的解决方案。试着在gradle.properties中添加下面的行,这个问题应该就不会再困扰您了(现在):

android.defaults.buildfeatures.buildconfig=true

此问题是由于buildConfigField(来自android.packageBuildConfig)的弃用,如in this commit所述。

2022年12月12日更新:

根据下面来自Roar Grønmo的注解,有一种比我在2014年建议的方法更新的方法来将时间戳潜入BuildConfig.java文件。
要使用这种较新的方法,请首先删除当前build.gradle(或build.gradle.kts)文件中类似以下内容的所有行:

buildConfigField("String", "BUILD_TIME", "\"" + System.currentTimeMillis().toString() + "\"")

相反,首先将以下内容添加到build.gradle.kts的顶部:

import com.android.build.api.variant.BuildConfigField

build.config.ktsandroid { ... }部分之外添加以下内容:

androidComponents {
    onVariants {
       it.buildConfigFields.put(
            "BUILD_TIME", BuildConfigField(
                "String", "\"" + System.currentTimeMillis().toString() + "\"", "build timestamp"
            )
        )
    }
}

您不必对主代码库进行任何新的更改--在Kotlin中仍然可以访问时间戳,如下所示:

private val buildDate = Date(BuildConfig.BUILD_TIME.toLong())
Log.i("MyProgram", "This .apk was built on ${buildDate.toString()}");

就是这样!请注意,这仍然需要对上述gradle.properties进行更改,否则您将看到**访问变量____中的值buildConfigFields无效,因为buildConfig功能被禁用。**警告。
也许还有一个更好的方法可以不使用BuildConfigField,但如果是这样的话,我不知道。如果有人有一个更永久的修复,请让我(我们)知道。

相关问题