appcompat-v7 support
지원 액션 바를 활용하고 머티리얼 테마를 지원하기 위해 라이브러리 를 사용하도록 애플리케이션을 변경했습니다 . v21.0.0 of appcompat-v7
(및을 사용하면 v21.0.0 of support-v4)
이제 Google Play
비정상 종료 가 표시되며 삼성 기기의 Crashlytics running
Android v4.2.2 작업 . Here is the stack trace from Google Play and the app appears to crash as soon as the
표시 줄 만 표시 및 / 또는 무효화됩니다.
java.lang.NoClassDefFoundError: android.support.v7.internal.view.menu.MenuBuilder
at android.support.v7.app.ActionBarActivityDelegateBase.initializePanelMenu(ActionBarActivityDelegateBase.java:991)
at android.support.v7.app.ActionBarActivityDelegateBase.preparePanel(ActionBarActivityDelegateBase.java:1041)
at android.support.v7.app.ActionBarActivityDelegateBase.doInvalidatePanelMenu(ActionBarActivityDelegateBase.java:1259)
at android.support.v7.app.ActionBarActivityDelegateBase.access$100(ActionBarActivityDelegateBase.java:80)
at android.support.v7.app.ActionBarActivityDelegateBase$1.run(ActionBarActivityDelegateBase.java:116)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:176)
at android.app.ActivityThread.main(ActivityThread.java:5299)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
at dalvik.system.NativeStart.main(Native Method)
v4.2.2를 실행하는 다른 장치 및 에뮬레이터는이 동작을 나타내지 않습니다. 많은 Google 앱이 이미이 새 버전을 사용 appcompat
하여 작업 표시 줄을 표시 하고 있다는 것을 알고 있습니다. 이러한 앱이 이러한 장치에서 충돌을보고하지 않는 경우이를 방지 / 해결하는 방법을 아는 것이 도움이 될 것입니다.
나는 이것을 Google에 버그로보고했지만 개발 문제라는 이유로 마감되었습니다. 나는이 사건 될 수있다 동의 할 수 있지만 사람이 현재 사용할 수있는 방법 / 경우, 궁금하네요 appcompat-v7 v21.0.0
과의 충돌을 얻을 수 없습니다 Samsung 4.2.2 devices
.
업데이트 : Google은 최소한 이에 대한 가능한 해결 방법을 고려하고있는 것 같습니다. 참고 이 내용은.
답변
여기에서 적절한 해결책을 찾았습니다 : https://stackoverflow.com/a/26641388/1266123
사용하여
-keep class !android.support.v7.internal.view.menu.**,android.support.v7.** {*;}
대신에
-keep class android.support.v7.** {*;}
답변
https://code.google.com/p/android/issues/detail?id=78377의 # 150이 말했듯이
-keep class! android.support.v7.internal.view.menu. **에주의하기 때문입니다. appcompat의 리소스에서 참조되는 여러 클래스가 있습니다.
더 나은 해결책은 다음 줄을 대신 추가하는 것입니다.
-keep class !android.support.v7.internal.view.menu.MenuBuilder, !android.support.v7.internal.view.menu.SubMenuBuilder, android.support.v7.** { *; }
-keep interface android.support.v7.** { *; }
답변
AppCompat jar Appcompat 23.1.1
의 .internal
패키지가 제거 되었기 때문에 .
proguard를 사용하여 업데이트 된 수정 :
#FOR APPCOMPAT 23.1.1:
-keep class !android.support.v7.view.menu.*MenuBuilder*, android.support.v7.** { *; }
-keep interface android.support.v7.* { *; }
답변
이 문제가있는 모든 경우 지금까지 해결 방법 만 proguard를 사용하는 것 같습니다. https://code.google.com/p/android/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars&groupby=&sort=&id=78377 에서 체크 아웃 토론
답변
progaurd없이 솔루션을 사용하는 데 관심이있는 사람.
onCreate ()의 setSupportActionBar (toolbar)에 대한 예외를 제공 한 내 앱 중 하나에서 이것을 시도한 링크를 읽으십시오 .
매우 간단합니다. 호출 주위에 try catch 블록을 추가합니다.
try {
setSupportActionBar(toolbar);
} catch (Throwable t) {
// WTF SAMSUNG!
}
답변
Tecno P9에서 동일한 문제가 발생했지만 빌드 도구 24를 사용하고 지원 라이브러리에 24.2.0을 사용한 후 해결되었습니다.
답변
프로젝트의 Compile Sdk 버전을 “API 18 : (JellyBean)”로 변경합니다.
기본값은 “Lollipop”으로 설정되어 있습니다.
지금까지 Qmobile i9에서 내 문제를 해결했습니다.
단계
- 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 모듈 설정 열기를 선택하거나 F4를 누릅니다.
- 속성 탭에서 컴파일 된 SDK 버전