android-gradle-logic について
Android チーム向けに、複合ビルドでコンベンションプラグインを使い、Gradle のビルドロジックを再利用する方法をまとめたリファレンスです。バージョンカタログの設定、共通構成、AGP 9 対応を扱います。
主な機能
- 01build-logic でのコンベンションプラグイン
- 02バージョンカタログの設定
- 03プラグインエイリアスと ID の整合
- 04Android と JVM の共通設定
- 05AGP 9 移行時の注意点
活用シーン
- 01Android モジュール間の設定集約
- 02build-logic の libs 参照エラーの解消
- 03AGP 9 に向けたコンベンションプラグインの更新
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ rcosteira79/ android-skills --skill android-gradle-logicインストール後、Claude Code で/android-gradle-logicを入力して読み込まれたか確認します。
詳細
Android Gradle ビルドロジック
build-logic/ コンポジットビルド内の再利用可能な規約プラグインにビルド設定を集約すると、各モジュールの build.gradle.kts は plugins { alias(libs.plugins.myapp.android.library) } と namespace だけになります。
標準的な実例は**nowinandroid の build-logic/**です。独自に一から作るのではなく、まずはこの例を参考にしてください。このスキルでは、間違えやすい配線の詳細と、AGP 9 での変更点を説明します。
配線で気をつける点
build-logic はルートのバージョンカタログを継承しません。カタログを再作成してください。 コンポジットビルドは独自の settings.gradle.kts を持つため、宣言するまではルートの libs カタログを build-logic 内で参照できません。これを行わないと、規約プラグインから libs.* を参照できず、Unresolved reference: libs というコンパイルエラーが発生します。
// build-logic/settings.gradle.kts
dependencyResolutionManagement {
versionCatalogs {
create("libs") { from(files("../gradle/libs.versions.toml")) }
}
}
カタログからプラグインを適用する
モジュールでエイリアスを使って適用できるように、[plugins] に規約プラグインの ID を宣言します。id は build-logic で register(...) する ID と一致している必要があります。エイリアスが解決されない場合、通常はこの不一致が原因です。
# gradle/libs.versions.toml
[plugins]
myapp-android-application = { id = "myapp.android.application" }
myapp-android-library = { id = "myapp.android.library" }
myapp-android-compose = { id = "myapp.android.compose" }
ローカルで登録したプラグインには、バージョンは必要ありません。インクルードビルドがバージョンを提供するため、カタログにバージョンが宣言されていてもいなくても、エイリアスは解決されます。nowinandroid では version = "unspecified" を明示的に指定しています。これは問題なく、意図も分かりやすくなりますが、必須ではありません。
compileSdk/minSdk/Compose/JVM ツールチェーンなどの共通設定は、モジュールごとではなく規約プラグイン内で一度だけ設定します。Kotlin Android モジュールでは、kotlin { jvmToolchain(21) } が慣用的な 1 行の設定で、Kotlin と Java の両方のコンパイルにツールチェーンを設定します。
kotlin { jvmToolchain(21) }
AGP 9 での影響
上記の規約プラグインのパターンは AGP 8 を対象としています。AGP 9 では、ビルドロジックに直接影響する変更がいくつかあります。単独の org.jetbrains.kotlin.android プラグインが廃止され、Kotlin は com.android.application/com.android.library に組み込まれます。BaseExtension と旧バリアント API(applicationVariants → androidComponents { onVariants { … } })が削除されます。kotlinOptions {} はトップレベルの kotlin { compilerOptions { … } } に移行し、kapt は互換性がなくなるため KSP に移行する必要があります。これらを使用する規約プラグインは更新が必要です。
手順をここで重複して説明するのではなく、具体的な移行方法については専用の移行スキルを参照してください。純粋な Android プロジェクトについては Google の agp-9-upgrade、KMP については JetBrains の kotlin-tooling-agp9-migration、kapt から KSP への移行についてはこのリポジトリの gradle-build-performance スキルを参照してください。
チェックリスト
- ルートの
settings.gradle.ktsでbuild-logicをコンポジットビルドとして追加している(includeBuild("build-logic")) -
build-logic/settings.gradle.ktsでfrom(files("../gradle/libs.versions.toml"))を使ってlibsカタログを再作成している - 規約プラグインを安定した ID で
registerし、[plugins]のエイリアス ID がそれらと完全に一致している -
compileSdk/minSdk/Compose/JVM ツールチェーンを、モジュールごとではなくプラグイン内で一度だけ設定している