2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Android Gradle Plugin 9.0 更新対応

Last updated at Posted at 2026-01-17

Android Gradle Plugin(AGP) 9.0 がリリースされ、大きめの変更が入っているので対応した時のメモになります。
掻い摘んだ内容になるので公式のリリースノートも参照ください。

KMP のプロジェクトの場合はここでは解説しませんが以下の記事を併せて参照することをお勧めします。

対応の流れ

AGP 9.0 更新は以下の流れで対応することになると思います。

  1. Gradle 9.1 以上に更新する
  2. AGP 9.0 に更新する
  3. AGP 9.0 で追加されたオプションを無効にする
  4. オプションを一つづつ有効にしていき、エラーが出れば修正していく

Android Studio の AGP Upgrade Assistant を使用することで 3 まで対応してくれるので、事前に使用してビルドが通るところまで確認できるとひとまず AGP の更新自体はできたことになります。

オプションを一つづつ解決していく

全ての変更点は以下のリンク先に記載されています。

オプションをひとまずオプトアウトさせると以下のような感じになると思います。(ここでオプトアウトしているオプションは全てではありません)

gradle.properties
android.defaults.buildfeatures.resvalues=true
android.sdk.defaultTargetSdkToCompileSdkIfUnset=false
android.enableAppCompileTimeRClass=false
android.usesSdkInManifest.disallowed=false
android.uniquePackageNames=false
android.dependency.useConstraints=true
android.r8.strictFullModeForKeepRules=false
android.r8.optimizedResourceShrinking=false
android.builtInKotlin=false
android.newDsl=false

AGP 10 ではオプトアウトができなくなるので、少しずつでも解決していくことをお勧めします。
いくつか大体のプロジェクトで影響がありそうなオプションをピックアップして解説します。

android.defaults.buildfeatures.resvalues

以下のような Gradle 内で定義しているリソースがデフォルトで無効になるオプションです。

defaultConfig {
    resValue("string", "api_url", "https://api.example.com")
}

リソースを定義したい場合はそのモジュール内で個別に有効にします。


buildFeatures {
    resValues = true
}

ちなみにプロジェクトでデフォルトが無効かつモジュールでも無効の場合に resValue を使うとビルド時にエラーが出ます。

android.sdk.defaultTargetSdkToCompileSdkIfUnset

targetSdkVersion が設定されていない場合のデフォルトの挙動が変わるオプションです。
これまでは未設定の場合には compileSdkVersion が使われていましたが、このオプションを有効にすると明示的な設定が必要になります。

android.enableAppCompileTimeRClass

R class の扱いを、アプリでもライブラリと同じ方式に統一するオプションで、有効にすると R class の id が final ではなくなります。
Java で R class の id を switch 文で使用している場合に final でなくなると使用できなくなるため、単純な if 文にする必要が出てきます。

android.usesSdkInManifest.disallowed

AndroidManifest で SDK バージョンの指定を禁止するオプションです。
最近は Gradle 側で定義するのでこのオプションを有効にして受ける影響はあまりないでしょう。

android.uniquePackageNames

モジュール間でパッケージ名を一意にすることを強制するオプションです。
モジュール内のクラスの配置するパッケージではなく、モジュールの namespace で重複がある場合は一意にしましょう。

android.dependency.useConstraints

構成間の依存関係の制約をどのビルドで適用するかのオプションで、これを無効にすると AndroidTest 以外では制約が使われなくなります。
これは依存関係の解決をプロジェクト全体で行われていたものを、アプリやテストでそれぞれ解決するようになるというものです。

android.proguard.failOnMissingFiles

getDefaultProguardFile() に渡しているファイルが存在しない場合にビルドエラーなるオプションです。

android.r8.strictFullModeForKeepRules

R8 がクラスを保持する場合でもデフォルトコンストラクタを自動的に保持しないようになるオプションです。
これを有効にしつつデフォルトコンストラクタを保持させたい場合は -keep class A-keep class A { <init>(); } に書き換える必要があります。

android.r8.optimizedResourceShrinking

クラスと Android リソースをまとめて分析することでこれまで以上に R8 が最適化をするようになるオプションです。

android.r8.proguardAndroidTxt.disallowed

getDefaultProguardFile()proguard-android.txt ではなく proguard-android-optimize.txt のみをサポートするようになるオプションです。

android.r8.globalOptionsInConsumerRules.disallowed

ライブラリやモジュールに含まれる Proguard の設定に特定のルールを許可しないオプションです。
ライブラリの提供者は dontoptimizedontobfuscate のような特定のルールを Proguard に含めず配布する必要があります。
そういったルールが含まれたライブラリを使用するアプリ側では、特定のルールが無視されてビルドされるようになります。

android.builtInKotlin

Build in Kotlin を有効にするオプションです。
モジュール単位での Build in Kotlin 移行も可能になっています。
詳細なマイグレーション手順は以下のリンク先を参照ください。

Build in Kotlin を使用しつつ最新の Kotlin を使いたい場合は以下のように buildscript に設定します。

build.gradle.kts
buildscript {
    dependencies {
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:KOTLIN_VERSION")
        classpath("com.google.devtoolsksp:symbol-processing-gradle-plugin:KSP_VERSION")
    }
}

ref: https://developer.android.com/build/releases/agp-9-0-0-release-notes#runtime-dependency-on-kotlin-gradle-plugin-upgrade

android.newDsl

2026/1/17 現在、Dagger/Hilt 2.58 が AGP 9.0 の newDsl に対応していないので、Hilt を使っている場合にこのオプションは有効にできません。

AGP が提供する API の裏側を新しい API に切り替えるオプションです。
これを有効にした場合は新しい DSL に実装を追従させる必要があります。
また、プロジェクトの構成次第(Composite Build の使用など)ではこれを有効にする前に android.builtInKotlin を有効にする必要があります。

こちらに関しては Hilt の問題が解決次第、追記か別記事を書こうと思います。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?