ticktakclockの日記

技術ポエムを綴ったりします。GitHub idも同じです (@ticktakclock)

既存プロジェクトをAndroidStudio ArcticFoxでビルドできるようにするまで

こんにちは、tkyです。

現在携わっているAndroidプロジェクトの開発環境Android Studio4.1からArcticFoxに切り替えてビルドできるようにするまでをまとめてみました。

皆さんも同じようなところでハマるかもしれないのでこれを読んでおくと心構えができるかもしれません。

やることを列挙します。大きく5つくらいですが、AndroidStudioが出すエラーを1つずつ対応していけばなんとかなります。

  • ArcticFoxをインストールする
  • AGP(com.android.tools.build:gradle)を7系にする
  • JDK11にする
  • com.google.gms:google-serviceを最新(2021/8/21現在:4.3.10)にする
  • arch.lifecycle関連の依存があればandroidx.lifecycleに移行する

ArcticFoxをインストールする

当たり前ですが、新しい開発環境をインストールしましょう。

私は古いバージョンの4.x系も使用したいのもあり管理が楽な JetBrains ToolBoxを利用しています。

f:id:ticktakclock:20210821134630p:plain
Toolboxの管理例

developer.android.com

インストールしたらとりあえずビルドができないことを確認してみましょう!

AGPを7にする

今までは4系を使っていたはずですが、飛躍的に7系にアプデします。

理由は下記のリリースブログに記載の通りセマンティックバージョニングを採用したためですね。

  • 今まで -> AndroidStudioのバージョン番号に合わせていた
  • これから -> Gradle自体のバージョンに合わせる

developers-jp.googleblog.com

JDK11にする

AGP7にする要件にもなりますが、Javaのバージョンを上げる必要があります。

AndroidStudioのmenu>preferenceからGradleJDKのバージョンを11にダウンロード及び更新します。

f:id:ticktakclock:20210821135753p:plain
JDK11にする

GMSプラグインを最新にする

できる限り最新(2021/8/21現在:4.3.10)が望ましいですが、

『v4.3.9だとGradleのプラグインがうまく動作しない問題がある』

というところだけおさえておけば大丈夫だと思います。

ちなみにv4.3.9でもビルドできますが、起動時以下のエラーで即落ちることになります。

W/FirebaseApp: Default FirebaseApp failed to initialize because no default options were found. This usually means that com.google.gms:google-services was not applied to your gradle project.

androidx.lifecycleに移行する

これは人によって必要なことです。すでにサポート終了しているlifecycle-extensionsの依存がまだ残っていてビルドエラーとなって現れてきました。

以下のページを参考に自分が必要としているライブラリの依存を記述しましょう。

developer.android.com

まとめ

以上でおおよその方々がビルドできるようになったかと思います。 以降私のプロジェクトで個別で発生した問題を書いていきます。

余談ですが、この内容を自社のAndroidチームに共有したところ

「うちのプロジェクトではCIが通らなかったんですよね〜」

といった情報をもらえたり

「参考にしてうちのプロジェクトもArcticFoxになりました!」

のように参考にしてもらえたり良い影響が出ました。

みなさんもまずは身近な人に共有してみましょう!

その他ハマったこと、やったこと

'jcenter' is deprecated

まだJCenterの依存が残っていて消すと依存ライブラリでエラーが発生するので一旦このままにして、別途作業することにしました。

Firebase関連をBOM形式に記載し直した

ついでにBOMに記載し直しました。

こういう機会がないとなかなかbuild.gradleのメンテできないので良い機会でした。

firebase.google.com

protobuf-lite -> protobuf-javalifeに変更

API通信にprotoを使っています。

既存のprotobuf-liteはメンテされていない古いものだったらしく新しいprotobuf-javalifeに変更して対応しました。

その際に参考となったブログ記事がこちらです。助かりました、ありがとうございます。

h.s64.jp

Circle CIのGraldeオプションをちょっと変更

JDKのガベージコレクタの仕様が変わっているらしくSerialGCになっているようなので明示的にParallelGCに設定しました

-XX:+UseParallelGC

以上です。それでは楽しいAndroid Studioライフを👋