在新版Android Studio(火烈鸟|2022.2.1 Canary 9),使用org.jetbrains.Kotlin(1.8.0-Beta)插件和8.0.0-alpha 09 gradle插件,一个新的构建版本突然出现此错误:组建类型'release'包含自订BuildConfig字段,但此功能已停用。有什么办法能让这件事过去吗
oxiaedzo1#
回答我自己的问题--有一个快速的解决方案。试着在gradle.properties中添加下面的行,这个问题应该就不会再困扰您了(现在):
gradle.properties
android.defaults.buildfeatures.buildconfig=true
此问题是由于buildConfigField(来自android.packageBuildConfig)的弃用,如in this commit所述。
buildConfigField
2022年12月12日更新:
根据下面来自Roar Grønmo的注解,有一种比我在2014年建议的方法更新的方法来将时间戳潜入BuildConfig.java文件。要使用这种较新的方法,请首先删除当前build.gradle(或build.gradle.kts)文件中类似以下内容的所有行:
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.kts的android { ... }部分之外添加以下内容:
build.config.kts
android { ... }
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,但如果是这样的话,我不知道。如果有人有一个更永久的修复,请让我(我们)知道。
BuildConfigField
1条答案
按热度按时间oxiaedzo1#
回答我自己的问题--有一个快速的解决方案。试着在
gradle.properties
中添加下面的行,这个问题应该就不会再困扰您了(现在):此问题是由于
buildConfigField
(来自android.packageBuildConfig)的弃用,如in this commit所述。2022年12月12日更新:
根据下面来自Roar Grønmo的注解,有一种比我在2014年建议的方法更新的方法来将时间戳潜入
BuildConfig.java
文件。要使用这种较新的方法,请首先删除当前
build.gradle
(或build.gradle.kts
)文件中类似以下内容的所有行:相反,首先将以下内容添加到
build.gradle.kts
的顶部:在
build.config.kts
的android { ... }
部分之外添加以下内容:您不必对主代码库进行任何新的更改--在Kotlin中仍然可以访问时间戳,如下所示:
就是这样!请注意,这仍然需要对上述
gradle.properties
进行更改,否则您将看到**访问变量____中的值buildConfigFields无效,因为buildConfig功能被禁用。**警告。也许还有一个更好的方法可以不使用
BuildConfigField
,但如果是这样的话,我不知道。如果有人有一个更永久的修复,请让我(我们)知道。