son*_*que 80 android google-cloud-messaging android-gradle-plugin firebase-cloud-messaging
自从我更新到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)
Run Code Online (Sandbox Code Playgroud)
这是一段崩溃的代码:
InstanceID instanceID = InstanceID.getInstance(this); // <-- crash here
String instanceIDToken = instanceID.getToken(getString(R.string.google_app_id),
GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
Run Code Online (Sandbox Code Playgroud)
当我尝试从Google Cloud Messaging获取令牌时.
我正在使用分割的播放服务在Gradle中导入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'
Run Code Online (Sandbox Code Playgroud)
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.
Run Code Online (Sandbox Code Playgroud)
有没有人有类似的错误,以及如何解决它?
FIXED
特别感谢@stegranet.
./gradlew -q app:dependencies --configuration compile帮助您确定哪些依赖项包括SDK 24.x.
主要问题是某些库使用+符号而不是版本导入最新的支持库.这会导致问题,包括最新的可用版本.
因此,请避免+登录依赖项;)
小智 37
我使用gradle依赖树为我解决了这个错误.
只需运行gradle -q app:dependencies --configuration compile
并检查输出以查找如下条目:
+--- com.mcxiaoke.viewpagerindicator:library:2.4.1
| \--- com.android.support:support-v4:+ -> 24.0.0-beta1 (*)
Run Code Online (Sandbox Code Playgroud)
正如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'
Run Code Online (Sandbox Code Playgroud)
Die*_*ini 35
更新可能27:
我们刚刚发布了一个update(version 9.0.1)来修复我在第一次编辑中提到的不兼容性.
请更新您的依赖项,如果仍有问题,请告知我们.
谢谢!
原答案5月20日:
您遇到的问题是由于
play-services / firebase sdk v9.0.0和
com.android.support:appcompat-v7 >= 24
(与android-N sdk发布的版本)不兼容
您应该能够通过定位支持库的早期版本来修复它.喜欢:
compile 'com.android.support:appcompat-v7:23.4.0'
Run Code Online (Sandbox Code Playgroud)
我已经更新了play-services依赖项 build.gradle
dependencies {
compile 'com.google.android.gms:play-services:9.0.0'
}
Run Code Online (Sandbox Code Playgroud)
要通过更新google-services插件的版本来修复版本冲突,我必须build.gradle在项目的根文件夹下更新google-services
dependencies {
classpath 'com.google.gms:google-services:3.0.0'
}
Run Code Online (Sandbox Code Playgroud)
您可以在此处获取Google服务的最新更新.
虽然它没有避免异常,但它不再崩溃应用程序在我身边.
更新
我可以通过从Beta Channel更新Android工作室来避免崩溃.然后更新你的platform/build-tools内部SDK.
我的工作如下:
app level gradle
dependencies {
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:design:23.4.0'
compile 'com.google.android.gms:play-services:9.0.0'
}
Run Code Online (Sandbox Code Playgroud)
根级gradle
dependencies {
classpath 'com.google.gms:google-services:3.0.0'
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
45875 次 |
| 最近记录: |