更新到Android Build Tools 25.1.6 GCM / FCM后的IncompatibleClassChangeError

自从我更新到Android SDK工具25.1.6和Android支持存储库32.0.0(今天上午),我得到了以下错误,我没有更改任何代码,它仍然在我的同事计算机(Android SDK工具25.1.1 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)

这里是一段崩溃的代码:

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获取令牌时。

我正在导入GCM在Gradle与分拆的播放服务:

 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'

编辑
禁用GCM修复了问题,所以我的猜测是我应该迁移到Firebase Cloud Message

EDIT2
我的设备接收到Google Play服务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.

有人有类似的错误,以及如何解决它?

固定
特别感谢@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 (*)

由于Diego Giorgini表示此版本太高(> = 24)。
所以更新build.gradle中的依赖

compile('com.mcxiaoke.viewpagerindicator:library:2.4.1') {
    exclude module: 'support-v4';
}
compile 'com.android.support:support-v4:23.4.0'
http://stackoverflow.com/questions/37312340/incompatibleclasschangeerror-after-updating-to-android-build-tools-25-1-6-gcm

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:更新到Android Build Tools 25.1.6 GCM / FCM后的IncompatibleClassChangeError