🙏

JCenter終了でFlutterエンジニアが受ける影響とその対策

2021/02/05に公開

2021年の5月1日にJCenterが終了することがアナウンスされました。
https://jfrog.com/blog/into-the-sunset-bintray-jcenter-gocenter-and-chartcenter/

このニュースを受けて、Androidエンジニア界隈はこの話題で持ちきりだった印象があります。
Flutterアプリエンジニアも影響を受けるので、気にしておくと良いのではないでしょうか。

この騒動によるAndroidエンジニアが受ける影響と対策はこちらの記事によくまとまっています。
https://bps-tomoya.hateblo.jp/entry/2021/02/04/184317

JCenterってなに?

Flutterの世界で言うところのpub.devのようなものだと思えばざっくりは間違っていないと思います。
Javaのライブラリなど(アーティファクト)をホストする、パブリックなMavenリポジトリです。

Androidでも使用するライブラリをホストしてくれているので、Androidアプリエンジニアはお世話になる事が多いです。

他のパブリックリポジトリ

JCenterの他にも以下のパブリックリポジトリがあります。

  • MevenCentral
    • 大手リポジトリ。JCenterになければ次に探すのはここ
  • JitPack
    • Githubにpushしたリポジトリをビルドして公開してくれる
  • Github Package
    • 自前でビルドしたアーティファクトをアップロードしてホストする

Flutterアプリが受ける影響と対策

Androidアプリをビルドする際に、JCenterにホストされている依存ライブラリを取得できなくなります。
取得できなければ当然ビルドできません。

影響を確認する方法

android ディレクトリ以下にある全ての build.gradle ファイル(デフォルトだと android/build.gradleandroid/app/build.gradle の2つ)の全ての repositories ブロックから、 jcenter() を削除します。
代わりに mavenCentral() に置き換えてからビルドを試みると、必要なライブラリがMavenCentralにあるかどうかわかります。

repositories {
    google()
-   jcenter()
+   mavenCentral()
}

アプリ本体

デフォルトで入っている依存関係

Android Gradle Plugin (4.2)が、JCenterにホストされているtrove4jに依存しているようなので、AGPの更新が必要になります。
次のバージョン7.0で対応するとのことなので、完了するのを待ってから使用するAGPのバージョンを上げましょう。
MavenCentralから取得できるようになるはず。
https://www.reddit.com/r/androiddev/comments/lbssfn/now_that_bintray_and_jcenter_are_shutting_down/glww2jk?utm_source=share&utm_medium=web2x&context=3

手動で入れた依存関係

アプリの拡張をする際に android/app/build.graldedependencies ブロックに自分で依存関係を追加することがあるかもしれません。
そうした依存関係を追加した場合、それらがMavenCentralなど他のリポジトリにも掲載されているか確認する必要があります。

プラグイン

pubspec.yamldependencies セクションに記述したプラグイン(Pure Dartではないもの)の内部で、Android向けのコードの中にJCenterにホストされたアーティファクトを使用したものがあるかもしれません。

こればかりは使用しているプラグインの android/build.gradlerepositoriesjcenter() の記述がないか確認し、記述があるようなら当該プラグインの作者に確認を依頼(ローカルで記述を削除して動作確認しても良い)、場合によっては修正を依頼するしかありません。

プラグインの更新が放棄されていると思しき場合は、別の同じようなプラグインに乗り換えるか、forkして自前でメンテナンスするなどの対応が必要になると思われます。

プラグイン作者は5/1までにJCenterに依存しないようにプラグインを更新する必要があります。
ついでなのでnull-safty対応も済ませておくとよいのではないでしょうか。

まとめ

  • Androidアプリのビルドに影響が出ます
  • 全開発者がAGPの影響を受けます。更新を待ちましょう
  • 影響を受けるプラグインがある可能性があります。プラグイン作者は更新を検討しましょう

Discussion