Android Gradle Plugin 8 のアップデートで対応したこと

こんにちは、 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'

終わりに

ある程度アップデートに追従していても、日々の業務が忙しくて後回しにしている警告なんかがありますね。いつそれが原因でビルドできなくなるか分からないので、ちゃんとメンテしましょう。