これまでのところ、このエラーはルート化された電話(SM-G900R7 Android 4.4.2)を使用する1人のユーザーに対してのみ発生しました。エラーは次のようなものです。
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)
コードでAndroid.graphics.drawable.Iconを使用することはありません。すべての使用はAndroid.support.v4.graphics.drawable.IconCompat
からであり、コードでそのクラスを使用することもありません...
ところで私のサポートライブラリはversion 26.0.0, my minSdkVersion is 15 targetSdkVersion is 26.
です
ありがとう
この問題は、サポートライブラリ27.0.0で修正されています。更新する場合は、compileSdkVersion 27
も変更することを忘れないでください。
Android 4.4を搭載したSamsungデバイスは、View
を拡張するクラスが、クラスパス上にない型のパラメーターを返すまたは受け取るメソッドを定義すると、このようにクラッシュします。
サポートライブラリバージョン25.4.0以降、AppCompatImageView
およびAppCompatImageButton
は、setImageIcon(Icon)
メソッドを誤ってオーバーライドします。 Icon
クラスがAPI 23で導入されたため、API 19のSamsungデバイスでアプリがクラッシュします。
View.onApplyWindowInsets(WindowInsets)
をオーバーライドしようとすると、同様のことが起こります。
これが公式の方法で修正されるまで、 サポートライブラリの古いバージョンにこだわっている場合は、setImageIcon
メソッドのすべてのトレースが削除されるappcompat-v7
の修正バージョンを作成しました。これは、Android 4.4を搭載したSamsungでクラッシュしないことを意味します。
これをアプリのbuild.gradleの下部に配置します。
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'
}
}
}
このコードは、appcompat-v7
依存関係を、説明されている変更された成果物に置き換えます。
現在、修正プログラムのサポートされているバージョンは26.1.0のみです。
警告:コピー&ペーストする前にコードを理解し、未知のソースからコードを取得するときは常に注意してください!
この問題は解決されました サポートライブラリ27.0.0で:
Android Gradleプラグイン3.x:
implementation 'com.Android.support:appcompat-v7:27.0.0'
implementation 'com.Android.support:support-v4:27.0.0'
Android Gradleプラグイン2.x:
compile 'com.Android.support:appcompat-v7:27.0.0'
compile 'com.Android.support:support-v4:27.0.0'
また、SDKレベル27に対してコンパイルする必要があることに注意してください。
このクラッシュは、サポートライブラリの25.4.0バージョンに関連しています。
25.3.1 versionを使用します。
交換
compile 'com.Android.support:appcompat-v7:25.4.0'
compile 'com.Android.support:support-v4:25.4.0'
と:
compile 'com.Android.support:appcompat-v7:25.3.1'
compile 'com.Android.support:support-v4:25.3.1'