Service End for Bintray, JCenter, GoCenter, and ChartCenter | JFrog
の対応をする。
まずは 【追記:2022年2月1日へ延期】JCenter が2021年5月1日にシャットダウンすることになったので Android アプリエンジニア観点でメモをまとめた - BattleProgrammerShibata でだいたいの状況を把握しよう。
影響があるかどうかの確認手順
-
八木さんのツイート を参考に確認方法をまとめる
-
build.gradle
の repositories で下記を削除するjcenter()
maven { url "http://dl.bintray.com...
-
build.gradle
の repositories にmavenCentral
が無ければ追加する -
./gradlew --refresh-dependencies
する -
./gradlew assemble
などでビルドする -
./gradlew test
などでテストを実行する
AGP が jcenter に依存してる問題の対策
- (2021/02/24追記) AGP 4.2 Beta05 で解消されたっぽい。
includeGroup("org.jetbrains.trove4j") を外して下記を実行
$ ./gradlew --refresh-dependencies
...
BUILD SUCCESSFUL in 27s
$ ./gradlew assemble
...
BUILD SUCCESSFUL in 41s
- 2021/02/15 時点で Android Studio 4.1系、4.2系で jcenter を外して Maven Central を設定すると、依存解決(gradle sync)時点で下記のようなエラーが発生する。
A problem occurred configuring root project 'EmojiPicker4T'.
> Could not resolve all artifacts for configuration ':classpath'.
> Could not find org.jetbrains.trove4j:trove4j:20160824.
Searched in the following locations:
- https://dl.google.com/dl/android/maven2/org/jetbrains/trove4j/trove4j/20160824/trove4j-20160824.pom
- https://repo.maven.apache.org/maven2/org/jetbrains/trove4j/trove4j/20160824/trove4j-20160824.pom
Required by:
project : > com.android.tools.build:gradle:4.2.0-beta04 > com.android.tools.build:builder:4.2.0-beta04 > com.android.tools:sdk-common:27.2.0-beta04
Possible solution:
- Declare repository providing the artifact, see the documentation at https://docs.gradle.org/current/userguide/declaring_repositories.html
-
Now that Bintray and JCenter are shutting down, what should we do with the Android libraries that are hosted there? : androiddev によると AGP 7.0 では修正済み、AGP 4.2 には(場合によっては 4.1 にも)バックポート予定らしい。
-
というわけで AGP 7 に依存するように変更すれば AGP 以外に問題になるものを洗い出せるんだけど、洗い出せるだけで開発は進まなくなるので、AGP 4.2 だけは jcenter への依存を許す ことにする(正確には
trove4j
だけ許す)
buildscript {
repositories {
google()
mavenCentral()
// TODO AGP が依存しなくなったら削除すること
jcenter().mavenContent {
includeGroup("org.jetbrains.trove4j")
}
}
dependencies {
classpath "com.android.tools.build:gradle:4.2.0-beta04"
// ...
}
}
allprojects {
repositories {
google()
mavenCentral()
// TODO AGP が依存しなくなったら削除すること
jcenter().mavenContent {
includeGroup("org.jetbrains.trove4j")
}
}
}
そしておもむろにSync Project with Gradle Files
する。
さあここからが本当の闘いだ。
各ライブラリの jcenter -> mavenCentral 移行メモ
PermissionsDispatcher
- PermissionsDispatcher は Maven Central に移行したっぽい。下記の修正で通った。
- implementation "org.permissionsdispatcher:permissionsdispatcher-ktx:1.0.0-alpha2"
+ implementation "com.github.permissions-dispatcher:permissionsdispatcher-ktx:4.8.0"
ViewPagerIndicator
- 2012年にメンテが終了した ViewPagerIndicator は有志により Maven Central にホストされてた
- implementation 'com.viewpagerindicator:library:2.4.1@aar'
+ implementation 'fr.avianey.com.viewpagerindicator:library:2.4.1.1@aar'
ExoPlayer
-
(2021/4/15追記) Exoplayer 2.13.3 から Google's Maven Repository でホストされるようになった。ので、下記の記述は不要。
-
ExoPlayer は 2021/02/15 時点では jcenter からの移行作業中らしい ので特別に許可しておく
allprojects {
repositories {
jcenter().mavenContent {
// TODO ExoPlayer が mavenCentral() or google() に移行したら削除すること
includeGroup("com.google.android.exoplayer")
}
}
}
koin
- DIライブラリの koin は
3.0.1-alpha-6
から mavenCentral に移行したようです。maven group id
がorg.koin
からio.insert-koin
に変わったので注意。 (2021/3/4追記)
- implementation("org.koin:koin-android:2.1.5")
+ implementation("io.insert-koin:koin-android:3.0.1-alpha-6")
realm-java
- realm-java は Maven Central に移行作業中とのこと (2021/03/05追記)
groupie
- (2021/5/10追記) jitpack に移行しました。
- implementation("com.xwray:groupie:${groupieVersion}")
+ implementation("com.github.lisawray.groupie:groupie:${groupieVersion}")
groupie は Migration from Bintray · Issue #384 · lisawray/groupie の issue が立ってるけど移行するのかな?(2021/03/05追記)
代替リポジトリがないライブラリをGitHub Pagesの野良mavenリポジトリに配置する(2021/2/16追記)
jCenterが閉鎖されるらしいので一旦Github Pagesを野良mavenリポジトリにして待避した話 - Qiita を参考に、代替リポジトリがないライブラリをGitHub Pages
に配置してみる。
今回は3年ほどメンテされてない syedowaisali/crystal-range-seekbar を jcenter から自分のリポジトリに移行してみる。
jcenter側のライブラリをダウンロードする
https://bintray.com/syedowaisali/maven/crystalrangeseekbar にアクセスするとファイルがあるのでダウンロードする。
ファイルツリーを維持するために下記のようなディレクトリ構成にする。
$ find takke.github.io -type f
takke.github.io/maven/com/crystal/crystalrangeseekbar/maven-metadata.xml
takke.github.io/maven/com/crystal/crystalrangeseekbar/1.1.3/crystalrangeseekbar-1.1.3-javadoc.jar
takke.github.io/maven/com/crystal/crystalrangeseekbar/1.1.3/crystalrangeseekbar-1.1.3-sources.jar
takke.github.io/maven/com/crystal/crystalrangeseekbar/1.1.3/crystalrangeseekbar-1.1.3.aar
takke.github.io/maven/com/crystal/crystalrangeseekbar/1.1.3/crystalrangeseekbar-1.1.3.pom
GitHub Pages にコミットする
GitHub に <username>.github.io
というリポジトリを作り、maven リポジトリをコミットする
$ cd takke.github.io/
$ git init
Initialized empty Git repository in D:/Src/takke.github.io/.git/
$ ls
maven/
$ git add maven
warning: LF will be replaced by CRLF in maven/com/crystal/crystalrangeseekbar/maven-metadata.xml.
The file will have its original line endings in your working directory
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: maven/com/crystal/crystalrangeseekbar/1.1.3/crystalrangeseekbar-1.1.3-javadoc.jar
new file: maven/com/crystal/crystalrangeseekbar/1.1.3/crystalrangeseekbar-1.1.3-sources.jar
new file: maven/com/crystal/crystalrangeseekbar/1.1.3/crystalrangeseekbar-1.1.3.aar
new file: maven/com/crystal/crystalrangeseekbar/1.1.3/crystalrangeseekbar-1.1.3.pom
new file: maven/com/crystal/crystalrangeseekbar/maven-metadata.xml
$ git commit -m "backup from jcenter"
[master (root-commit) 3378c40] backup from jcenter
5 files changed, 45 insertions(+)
create mode 100644 maven/com/crystal/crystalrangeseekbar/1.1.3/crystalrangeseekbar-1.1.3-javadoc.jar
create mode 100644 maven/com/crystal/crystalrangeseekbar/1.1.3/crystalrangeseekbar-1.1.3-sources.jar
create mode 100644 maven/com/crystal/crystalrangeseekbar/1.1.3/crystalrangeseekbar-1.1.3.aar
create mode 100644 maven/com/crystal/crystalrangeseekbar/1.1.3/crystalrangeseekbar-1.1.3.pom
create mode 100644 maven/com/crystal/crystalrangeseekbar/maven-metadata.xml
$ git remote add origin git@github.com:takke/takke.github.io.git
$ git push origin master
Enumerating objects: 12, done.
Counting objects: 100% (12/12), done.
Delta compression using up to 16 threads
Compressing objects: 100% (8/8), done.
Writing objects: 100% (12/12), 155.54 KiB | 792.00 KiB/s, done.
Total 12 (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:takke/takke.github.io.git
* [new branch] master -> master
ブラウザから https://takke.github.io/maven/com/crystal/crystalrangeseekbar/maven-metadata.xml
にアクセスして取得できたので問題なさそう。
build.gradle
に野良リポジトリを追加する
- まずは追加前の状態で
Sync Project with Gradle Files
してエラーになることを確認する。
Failed to resolve: com.crystal:crystalrangeseekbar:1.1.3
-
build.gradle
に下記のように追記する。
allprojects {
repositories {
google()
mavenCentral()
// ...
// crystalrangeseekbar は jcenter 以外に移行する可能性は低そうなので自分でホストする
maven {
url = uri("https://takke.github.io/maven")
content {
includeGroup("com.crystal")
}
}
}
}
- 改めて
Sync Project with Gradle Files
してエラーにならないことを確認。お疲れさまでした。
リンク集
- JCenter / Bintray等が停止することで起きる影響を考える - shuma_yoshioka’s diary
- 【追記:2022年2月1日へ延期】JCenter が2021年5月1日にシャットダウンすることになったので Android アプリエンジニア観点でメモをまとめた - BattleProgrammerShibata
- jCenterが閉鎖されるらしいので一旦Github Pagesを野良mavenリポジトリにして待避した話 - Qiita
ライブラリを mavenCentral に移行する際の参考
- GitHub上でのGradle Projectの管理状況2021
- bintray/JCenter に上げていたJVMライブラリを楽して Maven Central へ移行する
- github/maven-plugins: Official GitHub Maven Plugins
- PermissionsDispatcher も Maven Central に移行したのでこの辺りが参考になりそう⇒ https://github.com/permissions-dispatcher/PermissionsDispatcher/commit/d7e30604ad966cd56195db08e356c464a25daa95
更新履歴
- 2021/02/15 確認手順、対策、移行メモを書いた
- 2021/02/16 「代替リポジトリがないライブラリをGitHub Pagesの野良mavenリポジトリに配置する」追記
- 2021/02/24 AGP 4.2 Beta05 で解消されたっぽい旨を追記
- 2021/03/04 koinについて追記
- 2021/03/05 Realm, groupieについて追記
- 2021/04/15 ExoPlayer について追記
- 2021/05/10 Groupie の jitpack 移行について追記
- 2021/05/12 fix typo ("takke.github.com" -> "takke.github.io")