BuildConfigフィールドのカスタム設定によるビルドエラーの解決
問題の発生条件
Android Studio Flamingo以降(AGP 8.0+)で以下のエラーが発生する場合:
Build Type 'release' contains custom BuildConfig fields, but the feature is disabled.
このエラーは、カスタムBuildConfig
フィールドを使用しているのに、モジュールで機能が無効になっている場合に発生します。
🛠️ 推奨解決策:モジュールごとの設定
各モジュールのbuild.gradle
ファイルに次の設定を追加します:
kotlin
android {
buildFeatures {
buildConfig = true // BuildConfig機能を明示的に有効化
}
}
🔧 代替解決策(マルチモジュールプロジェクト)
サブプロジェクトを含む場合はルートのbuild.gradle
に設定:
kotlin
subprojects {
afterEvaluate { project ->
if (project.hasProperty('android')) {
project.android {
buildFeatures {
if (buildConfig == null) {
buildConfig true // 未設定の場合のみ有効化
}
}
}
}
}
}
⚠️ 非推奨な方法(避けるべき)
gradle.properties
でのグローバル設定はAGP 9.0で削除予定のため推奨されません:
properties
# 非推奨!将来的に動作しなくなる
android.defaults.buildfeatures.buildconfig=true
🚀 Android Studioの組み込みツール
以下の手順で自動移行可能(Android Studio Jellyfish 2023.3.1以降):
- プロジェクトツリーでプロジェクトルートを選択
- メニューから
Refactor > Migrate Build Config to Gradle Build Files
を実行
💡 カスタムBuildConfigフィールドの新設定例
kotlin
import com.android.build.api.variant.BuildConfigField
androidComponents {
onVariants {
it.buildConfigFields.put(
"BUILD_TIME",
BuildConfigField("String", "\"${System.currentTimeMillis()}\"", "ビルド時刻")
)
}
}
kotlin
val buildDate = Date(BuildConfig.BUILD_TIME.toLong())
println("APKビルド時刻: $buildDate")
なぜこの設定が必要か?
AGP 8.0から:
buildConfigField
はデフォルトで無効化されました- 従来の
gradle.properties
設定は非推奨に - モジュール単位での明示的有効化が必須となりました
ベストプラクティス
- プロジェクト全体設定よりモジュール単位の設定を優先
- 新しい
androidComponents
APIでカスタムフィールドを定義 - 非推奨API使用時はAndroid Studioの移行ツールを活用
この設定変更により、カスタムBuildConfig
フィールドを安全に利用しつつ、将来のAGPバージョンアップにも対応できます。