CircledImageViewライブラリを使用しています。 Lollipop + Androidバージョンで正常に動作します。しかし、キットカットではクラッシュします。Googleで検索したところ、アプリにmultidexを実装する必要があることがわかりました。
つまり、これは私のアプリケーションクラスです。
public class FireApp extends Application {
@Override
public void onCreate() {
super.onCreate();
Firebase.setAndroidContext(this);
Fresco.initialize (this);
}
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
そして、defaultconfigの下のbuild.gradleではMultiDexEnabledがtrueです
multiDexEnabled true
しかし、アプリを実行すると、次のエラーが発生します。
Java.lang.NoSuchFieldException: Field dexElementsSuppressedExceptions not found in class dalvik.system.PathClassLoader
at Android.support.multidex.MultiDex.findField(MultiDex.Java:288)
at Android.support.multidex.MultiDex.access$300(MultiDex.Java:57)
at Android.support.multidex.MultiDex$V19.install(MultiDex.Java:390)
at Android.support.multidex.MultiDex$V19.access$000(MultiDex.Java:369)
at Android.support.multidex.MultiDex.installSecondaryDexes(MultiDex.Java:242)
at Android.support.multidex.MultiDex.install(MultiDex.Java:161)
at Android.support.multidex.MultiDexApplication.attachBaseContext(MultiDexApplication.Java:39)
at com.buckydroid.anonchat.FireApp.attachBaseContext(Unknown Source)
at Android.app.Application.attach(Application.Java:182)
at Android.app.Instrumentation.newApplication(Instrumentation.Java:991)
at Android.app.Instrumentation.newApplication(Instrumentation.Java:975)
at Android.app.LoadedApk.makeApplication(LoadedApk.Java:511)
at Android.app.ActivityThread.handleBindApplication(ActivityThread.Java:4564)
at Android.app.ActivityThread.access$1500(ActivityThread.Java:139)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1353)
at Android.os.Handler.dispatchMessage(Handler.Java:102)
at Android.os.Looper.loop(Looper.Java:149)
at Android.app.ActivityThread.main(ActivityThread.Java:5268)
at Java.lang.reflect.Method.invokeNative(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:515)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:793)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:609)
at dalvik.system.NativeStart.main(Native Method)
compile 'com.Android.support:multidex:1.0.1'
ファイルにbuild.gradle
を含めてみてください。
次の手順を確認してくださいこの手順
1)build.gradleファイルに依存関係を追加します:
compile 'com.Android.support:multidex:1.0.0'
2)multidexを有効にし、ヒープサイズを設定します
defaultConfig {
applicationId "your package name"
minSdkVersion 19
targetSdkVersion 23
versionCode 1
versionName "1.0"
multiDexEnabled true
}
dexOptions {
javaMaxHeapSize "4g"
}
3)Applicationクラスにこれを追加します
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
4)これをマニフェストの<application>
タグに追加します:
Android:name=".YourApplicationClassName"
これを試してくださいアプリレベルのbuild.gradleファイル内に次のコード行を配置します
Android{
//compielsdkVersion..
//..
//..
vectorDrawables.useSupportLibrary = true
}
そして、CircularImageViewを使用しているActivity.Javaで、次の静的ブロックを次のようにonCreate()メソッドの先頭に配置します。
//...
//....
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
//...
//...
MultiDexApplication
を拡張していることを確認してください。build.gradle
ファイルはマルチデキシングを有効にし、compile 'com.Android.support:multidex:1.0.1'
パッケージの依存関係。MultiDexApplication
を使用していることを確認してください以前の解決策は問題ありませんが、1つ欠けているものMultiDexApplication
public class FireApp extends MultiDexApplication
API 19および20では、ライブラリは「抑制された例外」をloader.dexElementsSuppressedExceptionsに保存しようとしていました。
ただし、フィールドは存在せず、DexPathListにあるため、正しいパスはloader.pathList.dexElementsSuppressedExceptionsです。
Googleはそれを修正しました: https://Android.googlesource.com/platform/frameworks/multidex/+/74e66b8013b5b9002f67e53825c189a18597b1e8%5E%21/#F
Multidexバージョンを1.0.2+に更新する必要があります。
Android 4.3(API 18)on debug build(リリースはOK)を実行しているSonyデバイスで同じ問題に直面していました。すべてのソリューションを試した後、すべてを正しく行うようにして、まだ問題を修正できませんでした。
Android Studio for some device)を使用してAPKをビルドしてインストールしているときに、Lollipopデバイス用にビルドを一度実行してから、古いバージョン(KitKatより下)では、煩わしいMultiDex installation failed
エラーなしで実行されます。
アプリのビルドとテストに最も頻繁に使用する自分のデバイスはAPI28を実行することに注意してください。
マニフェストのアプリケーションタグにこの行を追加します
Android:name="Android.support.multidex.MultiDexApplication"