【Android-Error】Android 4.4.4 java.lang.NoClassDefFoundError
1226 ワード
プログラムが4.4.4で実行されるとフラッシュバックすることがあります.同時にjavaを報告することもあります.lang.NoClassDefFoundError
では、なぜこのような問題が発生するのか、実はプログラムがこの間違いを報告したときによく分析すると、一般的に膨大な第三者を継承したときにこの問題が発生することに気づきます.
この理由は、Androidが規定する方法の数が65536を超えてはならないためであり、単一のDalvikバイトコードファイル内のコード呼び出し可能な参照の総数を表す.
Android 5.0以前のDalvik実行ファイルではパケット化はサポートされていません
Android 5.0以前のバージョンではDalvikを使用してアプリケーションコードを実行していました.デフォルトでは、Dalvik制限アプリケーションのAPKごとに1つのclassesしか使用できません.dexバイトコードファイル
一方、Android 5.0以降のDalvik実行可能ファイルはパッケージ化をサポートしています.
Android 5.0以降でARTという名前のランタイムを使用すると、後者はAPKファイルから複数のDEXファイルをロードすることを原生的にサポートします.ARTは、アプリケーションのインストール時にプリコンパイルを行い、classesNをスキャンする.dexファイルを単一にコンパイルします.oatファイル、Androidデバイスの実行、(ネット上のcopyから)
ここには2つの解決策があります
1.minSdkValersonを21以上に設定
2.(1)まずbuild.gradleファイルでmultiDexEnabledをtrueに設定
(2)書き換えアプリケーションでattachBaseContextメソッドを書き換える
大功を成し遂げる.
では、なぜこのような問題が発生するのか、実はプログラムがこの間違いを報告したときによく分析すると、一般的に膨大な第三者を継承したときにこの問題が発生することに気づきます.
この理由は、Androidが規定する方法の数が65536を超えてはならないためであり、単一のDalvikバイトコードファイル内のコード呼び出し可能な参照の総数を表す.
Android 5.0以前のDalvik実行ファイルではパケット化はサポートされていません
Android 5.0以前のバージョンではDalvikを使用してアプリケーションコードを実行していました.デフォルトでは、Dalvik制限アプリケーションのAPKごとに1つのclassesしか使用できません.dexバイトコードファイル
一方、Android 5.0以降のDalvik実行可能ファイルはパッケージ化をサポートしています.
Android 5.0以降でARTという名前のランタイムを使用すると、後者はAPKファイルから複数のDEXファイルをロードすることを原生的にサポートします.ARTは、アプリケーションのインストール時にプリコンパイルを行い、classesNをスキャンする.dexファイルを単一にコンパイルします.oatファイル、Androidデバイスの実行、(ネット上のcopyから)
ここには2つの解決策があります
1.minSdkValersonを21以上に設定
2.(1)まずbuild.gradleファイルでmultiDexEnabledをtrueに設定
android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 23
multiDexEnabled true
}
...
}
(2)書き換えアプリケーションでattachBaseContextメソッドを書き換える
public class MyApplication2 extends Application {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
大功を成し遂げる.