Android SDK Tools 25.1.6 및 Android Support Repository 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 클라우드 메시징에서 토큰을 얻으려고 할 때입니다.
분할 된 플레이 서비스를 사용하여 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'
편집
내 생각 엔 내가 중포 기지 클라우드 메시지로 마이그레이션해야하므로 사용하지 GCM은 문제를 해결
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 (*)
으로 디에고 오르기는 이 버전 (> = 24) 너무 높은 말했다. 따라서 다음 build.gradle
과 같이 종속성을 업데이트하십시오.
compile('com.mcxiaoke.viewpagerindicator:library:2.4.1') {
exclude module: 'support-v4';
}
compile 'com.android.support:support-v4:23.4.0'
답변
업데이트 5 월 27 일 :
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'
답변
내 작업은 다음과 같습니다.
앱 수준 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'
}
루트 수준 gradle
dependencies {
classpath 'com.google.gms:google-services:3.0.0'
}
답변
플레이 서비스 종속성을 업데이트했습니다. build.gradle
dependencies {
compile 'com.google.android.gms:play-services:9.0.0'
}
google-services 플러그인의 버전을 업데이트하여 버전 충돌을 해결하려면 build.gradle
프로젝트의 루트 폴더 아래 에있는 google-services를 업데이트해야했습니다.
dependencies {
classpath 'com.google.gms:google-services:3.0.0'
}
여기 에서 google-services의 최신 업데이트를받을 수 있습니다 .
예외를 피하지는 않지만 내 쪽에서 더 이상 응용 프로그램을 충돌시키지 않습니다.
최신 정보
베타 채널에서 Android 스튜디오를 업데이트하여 충돌을 피할 수있었습니다. 그런 다음 platform/build-tools
내부 SDK를 업데이트하십시오 .
답변
최신 Google Play 서비스 버전으로 업데이트하면 문제가 해결되었습니다.
플러그인 적용 : 하단에 ‘com.google.gms.google-services’…
dependencies {
compile 'com.google.android.gms:play-services:9.0.0'
}
https://developers.google.com/android/guides/setup#add_google_play_services_to_your_project
답변
페이스 북이 sdk를 업데이트했기 때문에 나에게 일어났습니다.
compile 'com.facebook.android:facebook-android-sdk:4.+'
그것을 대체
compile 'com.facebook.android:facebook-android-sdk:4.15.0'
내 문제를 해결했습니다.
참고 : https://developers.facebook.com/docs/android/change-log-4.x
답변
모든 플레이 서비스의 패키지를 포함함으로써
dependencies {
compile 'com.google.android.gms:play-services:9.0.0'
}
오류를 억제하지만 최종 결과는 GCM 토큰 검색이 작동하지 않거나 GCM의 인스턴스를 가져올 수 없다는 것입니다. 그래서 이것은 내 책에서 해결책이 아닙니다. 누가 무슨 일이 일어나고 있는지 아는 사람이 있으면 우리를 계몽하십시오.
편집하다:
GCM을 firebase로 교체하고, android studio를 2.1에서 2.2로 업데이트하여 firebase 분석의 즉각적인 실행 문제를 해결하고, 빌드 도구를 24-rc4로, 플랫폼 도구를 24-rc3으로 업데이트하고, 지원 라이브러리의 버전을 23.4.0으로 유지했습니다. 이제 모든 것이 잘 작동하는 것 같습니다.