[解決済み] Android Build Tools 25.1.6 GCM / FCM にアップデート後、IncompatibleClassChangeError が発生する。
質問
Android SDK Tools 25.1.6 と Android Support Repository 32.0.0 にアップデートしてから (今朝)、次のようなエラーが発生しました。私のコードには何も変更がなく、同僚のコンピューター (Android SDK Tools 25.1.1 + Android Support Repository 30.0.0) ではまだ動いています。
java.lang.IncompatibleClassChangeError: The method
'java.io.File android.support.v4.content.ContextCompat.getNoBackupFilesDir(android.content.Context)'
was expected to be of type virtual but instead was found to be of type direct
(declaration of 'java.lang.reflect.ArtMethod' appears in /system/framework/core-libart.jar)
at com.google.android.gms.iid.zzd.zzeb(Unknown Source)
at com.google.android.gms.iid.zzd.<init>(Unknown Source)
at com.google.android.gms.iid.zzd.<init>(Unknown Source)
at com.google.android.gms.iid.InstanceID.zza(Unknown Source)
at com.google.android.gms.iid.InstanceID.getInstance(Unknown Source)
at com.xxxxxxx.utils.RegistrationIntentService.onHandleIntent(RegistrationIntentService.java:55)
at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.os.HandlerThread.run(HandlerThread.java:61)
以下は、クラッシュしたコードの一部です。
InstanceID instanceID = InstanceID.getInstance(this); // <-- crash here
String instanceIDToken = instanceID.getToken(getString(R.string.google_app_id),
GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
Google Cloud Messagingからトークンを取得しようとしたときです。
Gradleでplay-servicesを分割してGCMをインポートしているのですが.
compile 'com.google.android.gms:play-services-analytics:9.0.0'
compile 'com.google.android.gms:play-services-maps:9.0.0'
compile 'com.google.android.gms:play-services-location:9.0.0'
compile 'com.google.android.gms:play-services-gcm:9.0.0'
compile 'com.google.android.gms:play-services-base:9.0.0'
EDIT GCMを無効にすると問題が解決しましたので、Firebase Cloud Messageに移行した方が良いかと思います。
EDIT2 私のデバイスは、Google Play Services 9.0 (昨日は 8.4.x) を受信します。これでクラッシュはしなくなりましたが、モジュール記述子について文句を言われます。
Failed to load module descriptor class: Didn't find class "com.google.android.gms.dynamite.descriptors.com.google.firebase.auth.ModuleDescriptor"
Firebase API initialization failure.
同じようなエラーが発生した方はいらっしゃいますか?
修正済み
special thanks to @stegranet.
./gradlew -q app:dependencies --configuration compile
は、SDK 24.x を含む依存関係を識別するのに役立ちます。
主な問題は、いくつかのライブラリが、最新のサポートライブラリを
+
という記号を使うことです。このため、最新版を取り込むことで問題が発生します。
そのため
+
のような依存関係のある記号は避けるべきです。)
どのように解決するのですか?
私はこのエラーを解決するために、gradleの依存関係ツリーを使用しました。
ただ、実行する
gradle -q app:dependencies --configuration compile
を実行し、このようなエントリーがないか出力を確認してください。
+--- com.mcxiaoke.viewpagerindicator:library:2.4.1
| \--- com.android.support:support-v4:+ -> 24.0.0-beta1 (*)
として
ディエゴ・ジョルジーニ
は、このバージョンは高すぎる (>=24) と言っています。
そこで
build.gradle
のように
compile('com.mcxiaoke.viewpagerindicator:library:2.4.1') {
exclude module: 'support-v4';
}
compile 'com.android.support:support-v4:23.4.0'
関連
-
[解決済み] Android開発ツールでEclipseをアップデート v. 23
-
[解決済み] アンドロイドフラグメント onRestoreInstanceState
-
[解決済み] プログラム的に電話をかけるには?
-
[解決済み] HttpPostによる画像送信
-
[解決済み] Android Navigation Architecture Component - 現在表示されているフラグメントを取得する
-
[解決済み] Gmailの3分割アニメーションシナリオの完全動作サンプル?
-
[解決済み] TabLayoutに対応したandroidデザインでタブテキストのフォントを変更する
-
[解決済み] Studio 3.4 をアップデートしたら、引数の leftShift() メソッドが見つかりませんでした。
-
[解決済み] サポートライブラリのアクションバーをPreferenceActivityに追加するには?
-
[解決済み] アンドロイドボタンセレクター
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] HttpPostによる画像送信
-
[解決済み] getApplication()、getApplicationContext()、getBaseContext()、someClass.thisの違いと使い分け。
-
[解決済み] AppCompat-v7 21でアクションバー/ツールバーにアイコンを表示する。
-
[解決済み] 複数のフィルタを持つBroadcastReceiverか、複数のBroadcastReceiverか?
-
[解決済み] AsyncTaskLoaderとAsyncTaskの比較
-
[解決済み] Androidでツールバーの戻るボタンの色を変えるには?
-
[解決済み] ViewPager2でスワイプを無効にするには?
-
[解決済み] アンドロイドボタンセレクター
-
[解決済み] HttpURLConnectionを使ったPOSTによるファイル送信
-
[解決済み] コードの縮小方法 - dexの65kメソッド制限