Jak dotąd ten błąd wystąpił tylko dla jednego użytkownika, który korzysta z telefonu zrootowanego (SM-G900R7 Android 4.4.2). Błąd wygląda tak:
Fatal Exception: java.lang.NoClassDefFoundError: android/graphics/drawable/Icon
at java.lang.Class.getDeclaredMethods(Class.java)
at java.lang.Class.getDeclaredMethods(Class.java:656)
at android.view.ViewDebug.getExportedPropertyMethods(ViewDebug.java:960)
at android.view.ViewDebug.exportMethods(ViewDebug.java:1047)
at android.view.ViewDebug.dumpViewProperties(ViewDebug.java:997)
at android.view.ViewDebug.dumpViewProperties(ViewDebug.java:983)
at android.view.ViewDebug.dumpView(ViewDebug.java:900)
at android.view.ViewDebug.dumpViewHierarchy(ViewDebug.java:870)
at android.view.ViewDebug.dumpViewHierarchy(ViewDebug.java:867)
at android.view.ViewDebug.dumpViewHierarchy(ViewDebug.java:867)
at android.view.ViewDebug.dumpViewHierarchy(ViewDebug.java:867)
at android.view.ViewDebug.dumpViewHierarchy(ViewDebug.java:867)
at android.view.ViewDebug.dumpViewHierarchy(ViewDebug.java:867)
at android.view.ViewDebug.dumpViewHierarchy(ViewDebug.java:867)
at android.view.ViewDebug.dumpViewHierarchy(ViewDebug.java:867)
at android.view.ViewDebug.dump(ViewDebug.java:793)
at android.view.ViewDebug.dispatchCommand(ViewDebug.java:416)
at android.view.ViewRootImpl$W.executeCommand(ViewRootImpl.java:6258)
at android.view.IWindow$Stub.onTransact(IWindow.java:65)
at android.os.Binder.execTransact(Binder.java:404)
at dalvik.system.NativeStart.run(NativeStart.java)
Nigdy nie używam android.graphics.drawable.Icon w moim kodzie, wszystkie zastosowania pochodzą z android.support.v4.graphics.drawable.IconCompat
i nigdy nie używam tej klasy w moim kodzie ...
Przy okazji moja biblioteka wsparcia to version 26.0.0, my minSdkVersion is 15 targetSdkVersion is 26.
Dzięki
Odpowiedzi:
Aktualizacja
Problem został rozwiązany w bibliotece wsparcia 27.0.0. Jeśli zaktualizujesz, nie zapomnij również o zmianie
compileSdkVersion 27
.Co się dzieje?
Urządzenia Samsung z Androidem 4.4
View
ulegają awarii w ten sposób, gdy klasy rozszerzające definiują metody, które zwracają lub przyjmują parametry typów, które nie znajdują się w ścieżce klas.Począwszy od wersji 25.4.0 obsługi biblioteki
AppCompatImageView
iAppCompatImageButton
niepoprawnie zastępujesetImageIcon(Icon)
metodę. PonieważIcon
klasa została wprowadzona w API 23, aplikacja ulega awarii na urządzeniach Samsung z API 19.Podobnie dzieje się, gdy próbujesz przesłonić
View.onApplyWindowInsets(WindowInsets)
.Obejście problemu dla biblioteki obsługi 26.1.0
Dopóki nie zostanie to naprawione w oficjalny sposób,jeśli utkniesz ze starszą wersją biblioteki wsparcia, stworzyłem zmodyfikowaną wersję, wappcompat-v7
której wszystkie śladysetImageIcon
metod są usuwane. Oznacza to, że nie ulegnie awarii na Samsungu z Androidem 4.4.Umieść to na dole pliku build.gradle swojej aplikacji:
repositories { maven { url "https://dl.bintray.com/consp1racy/maven" } } configurations.all { resolutionStrategy.eachDependency { details -> def requested = details.requested if (requested.group == 'com.android.support' && requested.name == 'appcompat-v7') { details.useTarget 'net.xpece.android:support-appcompat-v7-fixed:26.1.0-1' } } }
Ten kod zastąpi
appcompat-v7
zależność opisanym zmodyfikowanym artefaktem.Obecnie jedyną obsługiwaną wersją poprawki jest 26.1.0.
Ostrzeżenie: zapoznaj się z kodem przed skopiowaniem i wklejeniem i zawsze zachowaj ostrożność podczas pobierania kodu z nieznanych źródeł!
źródło
Ten problem został rozwiązany w bibliotece wsparcia 27.0.0:
Wtyczka Android Gradle 3.x:
implementation 'com.android.support:appcompat-v7:27.0.0' implementation 'com.android.support:support-v4:27.0.0'
Wtyczka Android Gradle 2.x:
compile 'com.android.support:appcompat-v7:27.0.0' compile 'com.android.support:support-v4:27.0.0'
Pamiętaj, że będziesz musiał również skompilować się z SDK na poziomie 27.
źródło
Ta awaria dotyczy wersji 25.4.0 biblioteki obsługi.
Użyj wersji 25.3.1 .
Zastąpić
compile 'com.android.support:appcompat-v7:25.4.0' compile 'com.android.support:support-v4:25.4.0'
Z:
compile 'com.android.support:appcompat-v7:25.3.1' compile 'com.android.support:support-v4:25.3.1'
źródło
compileSdkVersion 25
, brak interfejsów API Android O i brak funkcji biblioteki wsparcia wprowadzonych od 25.4.0 (np. Przyciemnianie elementów rysunkowych widoku obrazu i backport morfowania ścieżki wektorowej). Oto biblioteka pomocy technicznej changelog developer.android.com/topic/libraries/support-library/ ...Istnieją 2 opcje:
źródło