修复“构建类型包含自定义 BuildConfig 字段,但该功能已禁用”错误 w/ buildConfigField

fat*_*ire 106 java android gradle android-studio android-buildconfig

在带有 org.jetbrains.kotlin (1.8.0-Beta) 插件和 8.0.0-alpha09 gradle 插件的新版本 Android Studio (Flamingo | 2022.2.1 Canary 9) 中,新版本突然出现此错误:

构建类型“release”包含自定义 BuildConfig 字段,但该功能已禁用。

有办法让它消失吗?

fat*_*ire 134

回答我自己的问题——有一个快速的解决方案。尝试添加以下行gradle.properties,问题应该不会再困扰您(目前):

\n
android.defaults.buildfeatures.buildconfig=true\n
Run Code Online (Sandbox Code Playgroud)\n

或者,根据 @Scott_AGP\'s 的回答,最好将其添加到build.gradle而不是更改gradle.properties

\n
android {\n    buildFeatures {\n        buildConfig = true\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

此问题是由于弃用了(来自 android.packageBuildConfig),如本提交中buildConfigField所述

\n

22 年 12 月 12 日更新:

\n

根据下面Roar Gr\xc3\xb8nmo的注释,有一种比我在 2014 年建议的方法BuildConfig.java更新的方法可以将时间戳隐藏到文件中。

\n

要使用此较新的方法,请首先删除当前build.gradle(或build.gradle.kts)文件中如下所示的任何行:

\n
buildConfigField("String", "BUILD_TIME", "\\"" + System.currentTimeMillis().toString() + "\\"")\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
import com.android.build.api.variant.BuildConfigField\n
Run Code Online (Sandbox Code Playgroud)\n

android { ... }并在部分之外build.config.kts添加以下内容:

\n
androidComponents {\n    onVariants {\n       it.buildConfigFields.put(\n            "BUILD_TIME", BuildConfigField(\n                "String", "\\"" + System.currentTimeMillis().toString() + "\\"", "build timestamp"\n            )\n        )\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
private val buildDate = Date(BuildConfig.BUILD_TIME.toLong())\nLog.i("MyProgram", "This .apk was built on ${buildDate.toString()}");\n
Run Code Online (Sandbox Code Playgroud)\n

就是这样!gradle.properties请注意,这仍然需要对上述进行更改,否则您将看到变量 ____ 中的访问值 buildConfigFields 无效,因为 buildConfig 功能被禁用。警告。

\n

可能仍然有更好的方法来做到这一点而不使用BuildConfigField,但如果是这样,我不知道。如果有人有更永久的解决方案,请告诉我(我们)。

\n


Sco*_*AGP 95

避免添加android.defaults.buildfeatures.buildconfig=true到您的gradle.properties文件中,因为该属性在 AGP 8.0 中已弃用,并计划在 AGP 9.0 中删除

build.gradle相反,使用以下命令将以下内容添加到每个模块的每个模块文件中BuildConfig

android {
    buildFeatures {
        buildConfig = true
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 对于每个模块?这是什么1995年? (15认同)
  • @Dazzle“一直是”模因 (5认同)

kda*_*dan 7

将这些行添加到您的 gradle.properties 中:

android.buildConfig=true
API_KEY=0000
Run Code Online (Sandbox Code Playgroud)

这些到 build.gradle(module):

buildFeatures {
        buildConfig = true
    }
Run Code Online (Sandbox Code Playgroud)