67
54

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

jcenter, bintray 廃止で自分のAndroidアプリに対応したことのメモ

Last updated at Posted at 2021-02-15

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
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する。

2021-02-15_15h26_28.png

さあここからが本当の闘いだ。

各ライブラリの jcenter -> mavenCentral 移行メモ

PermissionsDispatcher

-  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ライブラリの koin3.0.1-alpha-6 から mavenCentral移行したようです。maven group idorg.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

groupie

  • (2021/5/10追記) jitpack に移行しました。
-    implementation("com.xwray:groupie:${groupieVersion}")
+    implementation("com.github.lisawray.groupie:groupie:${groupieVersion}")

代替リポジトリがないライブラリを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 リポジトリをコミットする

image.png

$ 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 してエラーにならないことを確認。お疲れさまでした。

リンク集

ライブラリを mavenCentral に移行する際の参考

更新履歴

  • 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")
67
54
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
67
54

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?