問題
- classpath 'com.android.tools.build:gradle:3.3.2'
+ classpath 'com.android.tools.build:gradle:3.6.3'
Android Gradle Plugin(以後、AGP)のバージョンを上記にあげるとアプリ起動時に常にクラッシュするようになった。
クラッシュの内容は下記(長いので一部のみ)
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/common/R$string;
at com.google.android.gms.common.internal.StringResourceValueReader.<init>(Unknown Source:4)
at com.google.firebase.FirebaseOptions.fromResource(com.google.firebase:firebase-common@@19.3.0:156)
...
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.common.R$string" on path: DexPathList[[zip file "/data/app/jp.co.xxxx.xxxx.dev-adXmK0xgmXrAwD6TRpvPEA==/base.apk"],nativeLibraryDirectories=[/data/app/jp.co.xxxx.xxxx.dev-adXmK0xgmXrAwD6TRpvPEA==/lib/arm64, /data/app/jp.co.xxxx.xxxx.dev-adXmK0xgmXrAwD6TRpvPEA==/base.apk!/lib/arm64-v8a, /system/lib64, /product/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at com.google.android.gms.common.internal.StringResourceValueReader.<init>(Unknown Source:4)
at com.google.firebase.FirebaseOptions.fromResource(com.google.firebase:firebase-common@@19.3.0:156)
...
見たところ、firebaseライブラリに問題がありそうだが、調べてもクリティカルな解決方法がなかなか見つからない。
エラーメッセージ内に手がかりが無いクラッシュの解決は本当に骨が折れる。
解決方法
いろいろ検証した結果、RealmプラグインとAGPのバージョンの組み合わせが問題なことがわかった。
- classpath 'com.android.tools.build:gradle:3.3.2'
+ classpath 'com.android.tools.build:gradle:3.6.3'
- classpath "io.realm:realm-gradle-plugin:5.10.0"
+ classpath "io.realm:realm-gradle-plugin:6.0.2"
まとめ
すでにAndroid Studio4.0が出ており、AGPも4.0.0が標準となっているので、本記事はあまり役に立たないかもしれないが記録のために残しておく。
ちなみになぜまだ AGP3.6.3を使っているかというと、アプリの設計上AWSのAppSyncSDKを使っておりこれが最新のAGPとGradleに対応していないためだ。どうやらSDKの根本的な設計上の理由らしく、最新のバージョンへすぐに対応するのが難しいようだ。AppSyncを採用しようと考えている人は注意が必要だ。
参照