IncompatibleClassChangeError después de actualizar a Android Build Tools 25.1.6 GCM / FCM
Desde que actualicé Android SDK Tools 25.1.6 y Android Support Repository 32.0.0 (esta mañana), recibí el siguiente error, no cambié nada en mi código y todavía funciona en la computadora de mi colega (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)
Aquí hay un fragmento de código que se bloquea:
InstanceID instanceID = InstanceID.getInstance(this); // <-- crash here
String instanceIDToken = instanceID.getToken(getString(R.string.google_app_id),
GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
Es cuando trato de obtener un token de Google Cloud Messaging.
Estoy importando GCM en Gradle con servicios de juego divididos:
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'
EDITAR deshabilitar GCM solucionó el problema, así que supongo que debería migrar a Firebase Cloud Message
EDIT2 Mi dispositivo recibió Google Play Services 9.0 (ayer era 8.4.x). Ahora ya no se bloquea, pero se queja del descriptor del módulo
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.
¿Alguien tiene un error similar y cómo solucionarlo?
FIJO Un agradecimiento especial a @stegranet../gradlew -q app:dependencies --configuration compile
le ayuda a identificar qué dependencias incluyen SDK 24.x
El problema principal es que algunas bibliotecas importan la última biblioteca de soporte utilizando+
firmar en lugar de una versión. Esto causa el problema al incluir la última versión disponible.
Así que evita+
iniciar sesión dependencias;)