はじめに
Android アプリではいろいろなライブラリをオープンなリポジトリからダウンロードして利用しています。
そのリポジトリの中に JCenter
というモノがあり、2021年5月で閉鎖するという発表がありました。
この JCenter
というリポジトリ、大体の Android アプリで参照されてるんじゃないかってぐらい主要なリポジトリなので Android 界隈がざわつき、閉鎖期限の延長もされたのですが、あまりに影響が大きすぎたため閉鎖はされずに読み取り専用で存続することになりました。
(詳細については コチラの記事 がとてもわかりやすかったです。ありがとうございます。)
読み取り専用で存続することになったとは言え、またいつ方針が変わるかわからないので JCenter の依存を解消することにしました。
基本的な方針として
- ライブラリが
MavenCentral
リポジトリに移行されているか- yes
- 現状のバージョンのものが存在するか
- yes
- 何もしない
- no
- 最新バージョンにアップデートして問題ないか
- yes
- 最新バージョンにする
- no
- gradle の cache ファイルをローカルにコピーして使用する
- yes
- 最新バージョンにアップデートして問題ないか
- yes
- 現状のバージョンのものが存在するか
- no
- gradle の cache ファイルをローカルにコピーして使用する
- yes
こんな感じで進めました。
依存解消のためにやったことをつらつらと書き残しておきます。
何かの参考になると幸いです。
目次
やったこと
- build.gradle から
jcenter()
maven { url "http://dl.bintray.com...
という記述削除- JCenter を参照しないようにする
-
./gradlew --refresh-dependencies
を実行- --refresh-dependencies というオプションで依存状態リフレッシュ
- エラーが出なくなるまで繰り返す
-
mavenCentral()
をrepositories
に追加 -
de.mannodermaus.gradle.plugins:android-junit5:1.6.1.0
を1.8.2.0
に変更- MavenCentral 移行済み
-
./gradlew assemble --stacktrace --info
実行- StackTrace 付きでコンパイル
- エラーが出なくなるまで繰り返す
-
com.linecorp:linesdk:5.0.1
をcom.linecorp.linesdk:linesdk:5.6.2
に変更 -
maven { url 'https://s3.amazonaws.com/moat-sdk-builds' }
削除- 下記エラーが出るので削除
Could not HEAD 'https://s3.amazonaws.com/moat-sdk-builds/com/twitter/sdk/android/twitter/3.3.0/twitter-3.3.0.pom'. Received status code 403 from server: Forbidden
-
jp.co.cyberagent.android.gpuimage:gpuimage-library:1.4.1
をjp.co.cyberagent.android:gpuimage:2.1.0
に変更- 名前が変わって MavenCentral に移行されてた
- Maven Repository: jp.co.cyberagent.android » gpuimage
- フィルター関連のクラスが
filter
パッケージ配下に移動されてたのと一部名前が変わってたので修正
-import jp.co.cyberagent.android.gpuimage.GPUImageFilter;
-import jp.co.cyberagent.android.gpuimage.GPUImageGrayscaleFilter;
-import jp.co.cyberagent.android.gpuimage.GPUImageSepiaFilter;
-import jp.co.cyberagent.android.gpuimage.GPUImageToneCurveFilter;
+import jp.co.cyberagent.android.gpuimage.filter.GPUImageFilter;
+import jp.co.cyberagent.android.gpuimage.filter.GPUImageGrayscaleFilter;
+import jp.co.cyberagent.android.gpuimage.filter.GPUImageSepiaToneFilter;
+import jp.co.cyberagent.android.gpuimage.filter.GPUImageToneCurveFilter;
-
com.facebook.fresco:xxx
を1.11.0
から1.12.0
に変更-
com.facebook.fresco:animated-gif
とcom.facebook.fresco:animated-webp
の1.11.0
にはなぜかpom
ファイルがなかったので変更 - Central Repository: com/facebook/fresco/animated-gif/1.11.0
- Central Repository: com/facebook/fresco/animated-webp/1.11.0
-
-
com.mopub:mopub-sdk:5.7.0@aar
を5.8.0
に変更- MavenCentral には
5.8.0
からしかなかった - Maven Repository: com.mopub » mopub-sdk
- MavenCentral には
-
com.facebook.android:audience-network-sdk:4.27.0
を5.6.0
に変更 -
com.mopub.mediation:facebookaudiencenetwork:4.27.0.0
を5.6.0.0
に変更 -
com.android.volley:volley:1.1.1
を1.2.1
に変更- MavenCentral 移行済み
- Maven Repository: com.android.volley » volley
-
com.google.ads.mediation:mopub:5.12.0.1
を5.18.0.0
に変更- Google の Maven リポジトリ 移行済み
- Maven Repository: com.google.ads.mediation » mopub
-
以下エラーが発生するため Kotlin のバージョンを
1.3.61
から1.5.20
に変更Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.5.1, expected version is 1.1.16.
-
以下エラーが発生するため
.idea
を削除して Android Studio 再起動A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction > java.lang.reflect.InvocationTargetException (no error message)
-
プロジェクト直下に
local-repository
というディレクトリを作成し、プロジェクトのbuild.gradle
にリポジトリ検索対象として追加
buildscript {
repositories {
...
maven { url = rootProject.file('local-repository') }
}
}
-
local-repository/me/tatarka/retrolambda/projectlombok/lombok.ast/0.2.3.a2/
にpom
、aar
、jar
など配置-
local-repository/me/tatarka/retrolambda/projectlombok/lombok.ast/0.2.3.a2/
ディレクトリ作成% mkdir -p local-repository/me/tatarka/retrolambda/projectlombok/lombok.ast/0.2.3.a2/
-
jcenter()
を参照した状態でビルドし Gradle の キャッシュ~/.gradle/caches
を*lombok.ast*
というファイル名で検索し、ヒットしたファイルをlocal-repository/me/tatarka/retrolambda/projectlombok/lombok.ast/0.2.3.a2/
へコピー% cp `find ~/.gradle/caches -type f -name \*lombok.ast\* | grep modules | grep files` local-repository/me/tatarka/retrolambda/projectlombok/lombok.ast/0.2.3.a2/
- コピーできたか確認
% ls -lsa local-repository/me/tatarka/retrolambda/projectlombok/lombok.ast/0.2.3.a2/ total 1984 0 drwxr-xr-x 5 usr0200413 staff 160 4 25 16:21 ./ 0 drwxr-xr-x 3 usr0200413 staff 96 4 25 16:19 ../ 560 -rw-r--r-- 1 usr0200413 staff 283868 4 25 16:21 lombok.ast-0.2.3.a2-sources.jar 1416 -rw-r--r-- 1 usr0200413 staff 722592 4 25 16:21 lombok.ast-0.2.3.a2.jar 8 -rw-r--r-- 1 usr0200413 staff 1582 4 25 16:21 lombok.ast-0.2.3.a2.pom
-
-
以下も上記と同じ手順で配置
local-repository/com/twitter/sdk/android/twitter/3.3.0/
local-repository/com/google/android/flexbox/2.0.1/
local-repository/com/twitter/sdk/android/tweet-ui/3.3.0/
local-repository/com/twitter/sdk/android/tweet-composer/3.3.0/
local-repository/com/twitter/sdk/android/twitter-core/3.3.0/
local-repository/com/mani/ThinDownloadManager/1.3.0/
local-repository/com/google/ads/mediation/mopub/5.8.0.0/
local-repository/com/mopub/libAvid-mopub/3.6.4/
local-repository/com/moat/analytics/mobile/mpub/moat-mobile-app-kit/2.4.5/
local-repository/com/google/android/exoplayer/exoplayer/2.9.5/
local-repository/com/google/android/exoplayer/exoplayer-core/2.9.5/
local-repository/com/google/android/exoplayer/exoplayer-ui/2.9.5/
local-repository/com/google/android/exoplayer/exoplayer-core/2.9.5/
local-repository/com/google/android/exoplayer/exoplayer-dash/2.9.5/
local-repository/com/google/android/exoplayer/exoplayer-hls/2.9.5/
local-repository/com/google/android/exoplayer/exoplayer-smoothstreaming/2.9.5/
local-repository/com/applovin/applovin-sdk/8.1.4/
local-repository/com/google/ads/mediation/facebook/5.9.0.2/
local-repository/io/realm/realm-gradle-plugin/6.0.2
local-repository/io/realm/realm-transformer/6.0.2/
local-repository/io/realm/realm-annotations/6.0.2/
local-repository/io/realm/realm-android-library/6.0.2/
local-repository/com/getkeepsafe/relinker/relinker/1.3.0/
local-repository/io/realm/realm-annotations-processor/6.0.2/
local-repository/com/github/maskarade/android/orma/orma/6.0.2/
local-repository/com/github/maskarade/android/orma/orma-annotations/6.0.2/
local-repository/com/github/maskarade/android/orma/orma-core/6.0.2/
local-repository/com/github/maskarade/android/orma/orma-migration/6.0.2/
local-repository/com/github/maskarade/android/orma/orma-processor/6.0.2/
local-repository/com/outbrain/sdk/pub/obsdk/3.9.2/
local-repository/com/yarolegovich/discrete-scrollview/1.4.4/
local-repository/com/google/ads/mediation/maio/1.1.5.0/
-
以上で無事にビルドできるようになった
-
apk 作成時にエラーが出たので
de.mannodermaus.junit5:android-test-core
とde.mannodermaus.junit5:android-test-runner
を1.0.0
から1.3.0
に変更
参考
- Service End for Bintray, JCenter, GoCenter, and ChartCenter | JFrog
- JCenter が2021年5月1日にシャットダウンすることになったので Android アプリエンジニア観点でメモをまとめた - BattleProgrammerShibata
- AndroidアプリのJCenter閉鎖の影響調査と暫定対応 | MoT Lab (Mobility Technologies Engineering Blog)
- 利用ライブラリをMavenリポジトリ形式でプロジェクト内のファイルとして保持する(JCenterシャットダウンに向けて)