IncompatibleClassChangeError após atualizar para o Android Build Tools 25.1.6 GCM / FCM
Como atualizei para o Android SDK Tools 25.1.6 e o Android Support Repository 32.0.0 (hoje de manhã), recebi o seguinte erro, não alterei nada no meu código e ele ainda está funcionando no computador do meu colega (Android SDK Tools 25.1.1 + Repositório de suporte do Android 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)
Aqui está um trecho de código que trava:
InstanceID instanceID = InstanceID.getInstance(this); // <-- crash here
String instanceIDToken = instanceID.getToken(getString(R.string.google_app_id),
GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
É quando tento obter um token do Google Cloud Messaging.
Estou importando o GCM em Gradle com serviços de reprodução 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 desativar o GCM corrigiu o problema, então, acho que devo migrar para o Firebase Cloud Message
EDIT2 Meu dispositivo recebe o Google Play Services 9.0 (ontem foi 8.4.x). Agora ele não trava mais, mas reclama do descritor do 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.
Alguém tem um erro semelhante e como corrigi-lo?
FIXO agradecimentos especiais a @stegranet../gradlew -q app:dependencies --configuration compile
ajuda a identificar quais dependências incluem o SDK 24.x
O principal problema é que algumas bibliotecas importam a biblioteca de suporte mais recente usando+
assinar em vez de uma versão. Isso causa o problema, incluindo a versão mais recente disponível.
Então evite+
entrar em dependências;)