最近、MacBook を買い換えたので Git から新しい端末へ Android アプリのプロジェクトをクローンしてビルドしています。その時に古い Android アプリのビルドが失敗してしまいました。エラーを見ると 'io.realm:android-adapters:4.0.0' がダウンロードできないようでした。
Caused by: org.gradle.internal.resolve.ModuleVersionNotFoundException: Could not find io.realm:android-adapters:4.0.0.
io.realm:android-adapters のために jcenter() を残していましたが、検索すると GitHub から Java ファイルをプロジェクトへ追加すればいいよ的なコメントを見つけました。
+++Webサイト抜粋+++
The Realm Adapters dependency is not moved to Maven yet. You can directly copy the RealmRecyclerViewAdapter Java file in your project and use it in your custom adapter. You will not need to add dependency at all.
+++
Repository other than jcenter() to get realm adapters 4.0.0?
https://www.mongodb.com/community/forums/t/repository-other-than-jcenter-to-get-realm-adapters-4-0-0/106236/24
この際、依存関係から io.realm:android-adapters を消して、jcenter() ともおさらばするときかなと思いました。(3周遅れぐらいかも...)
特に難しいことはありませんでしたが、io.realm:android-adapters と jcenter() を削除して、ビルドが成功するまでの手順を残しておきます。
削除してビルドが成功するまでの手順
- jcenter() を build.gradle から削除
- implementation 'io.realm:android-adapters:4.0.0' を削除
- RealmBaseAdapter.java または RealmRecyclerViewAdapter.java をプロジェクトへ追加
- 追加した Java ファイルを修正
- RealmBaseAdapter, RealmRecyclerViewAdapter を import から削除
1. jcenter() を build.gradle から削除
buildscript と allprojects にある jcenter() を削除します。
buildscript {
repositories {
google()
mavenCentral()
jcenter() //これを削除
}
//中略
}
allprojects {
repositories {
google()
mavenCentral()
jcenter() //これを削除
maven { url 'https://jitpack.io'}
}
}
2. implementation 'io.realm:android-adapters:4.0.0' を削除
dependencies に追加していた implementation 'io.realm:android-adapters:4.0.0' を削除して Sync します。
dependencies {
implementation 'io.realm:android-adapters:4.0.0' //これを削除
//中略
}
3. RealmBaseAdapter.java または RealmRecyclerViewAdapter.java をプロジェクトへ追加
この状態で、ビルドするともちろんエラーが発生するので、必要なファイルを GitHub からダウンロードしてプロジェクトへ追加します。
RealmBaseAdapter.java
https://github.com/realm/realm-android-adapters/blob/master/adapters/src/main/java/io/realm/RealmBaseAdapter.java
RealmRecyclerViewAdapter.java
https://github.com/realm/realm-android-adapters/blob/master/adapters/src/main/java/io/realm/RealmRecyclerViewAdapter.java
4. 追加した Java ファイルを修正
javaファイルの先頭部分にある package を自分のアプリに変更します。
package io.realm;
package を変更すると、Cannot resolve sysmbol のエラーが大量に出るので、シンボルを解決できるように realm 関連を import します。
import io.realm.OrderedRealmCollection;
import io.realm.RealmChangeListener;
import io.realm.RealmList;
import io.realm.RealmModel;
import io.realm.RealmResults;
import io.realm.OrderedCollectionChangeSet;
import io.realm.OrderedRealmCollection;
import io.realm.OrderedRealmCollectionChangeListener;
import io.realm.RealmList;
import io.realm.RealmModel;
import io.realm.RealmResults;
5. RealmBaseAdapter, RealmRecyclerViewAdapter を import から削除
RealmBaseAdapter と RealmRecyclerViewAdapter を使用していたソースコードから import を削除します。
import io.realm.RealmBaseAdapter;
import io.realm.RealmRecyclerViewAdapter;
これで、ビルドが成功するようになります。
さいごに
やり始めればすぐでしたが、jcenter() を消す作業が億劫になっていたので MacBook を買い換えて良かったと思ってます。(ミッドナイトって手垢が目立つ...)