こんにちは、 id:numanuma08 です。2023年4月15日に Android Gradle Plugin 8.0 と Android Studio Flamingo がリリースされました。AGP 7.x から8 は破壊的変更もあるので対応が必須なことも多いと思います。私が参加しているプロジェクトでどう言った対応を行ったのか紹介します。
namespace が必須になりました
https://developer.android.com/build/releases/gradle-plugin#namespace-dsl
build.gradle で namespace を宣言し、AndroidManifest.xml で package を使わない設定が強制されます。いちおう、AGP 7.3の頃から対応をするように警告が出ていたのですが、つい後回しにしていたところ今回からビルドエラーとなりました。対応方法は簡単で、AndroidManifest.xml の manifest タグで package の宣言を消し、 build.gradle で namespace を宣言します。
私が参加しているプロジェクトではモジュール間で共通する設定を記述した拡張関数があるので、それの中で次の処理を追加しました。
// ライブラリモジュールで実行される // Packages.name はApplication IDと同一 namespace = "${Packages.name}${project.path.replace(File.pathSeparator, ".")}" // モジュールのプロジェクト名をパッケージ名に変換
デフォルトの設定値の変更に対応
https://developer.android.com/build/releases/gradle-plugin#namespace-dsl
build option のデフォルト設定値が変わったので対応しました。私が参加しているプロジェクトで影響があったものとそうでない物があったので、1つずつ確認しました。
- android.defaults.buildfeatures.buildconfig: ライブラリプロジェクトでは BuildConfig を生成しないので新しいデフォルト値 false で問題なし。アプリプロジェクトの gradle ファイル内で true を設定
- android.defaults.buildfeatures.aidl: aid を使っていないので関係ない
- android.defaults.buildfeatures.renderscript: renderscript を使っていないので関係ない
- android.nonFinalResIds: class R が final になっても問題ないので初期値の true を使う
- android.nonTransitiveRClass: モジュール間で R を参照していたので true とする
- android.enableR8.fullMode: R8 に対応しているので true
JDK 17 に変更
https://developer.android.com/build/releases/gradle-plugin#jdk-17-agp
CIを動かすまで気が付かなかったのですが、JDK 17以上が必須です。github actions を使っていたので workflow に以下を追記しました。
runs-on: ubuntu-latest - uses: actions/checkout@v3 - name: Set up JDK 17 uses: actions/setup-java@v3 with: java-version: '17' distribution: 'temurin'
終わりに
ある程度アップデートに追従していても、日々の業務が忙しくて後回しにしている警告なんかがありますね。いつそれが原因でビルドできなくなるか分からないので、ちゃんとメンテしましょう。