web-dev-qa-db-ja.com

Multidexのインストールに失敗しました

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)
16
Doge

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"
3
Maddy

これを試してくださいアプリレベルのbuild.gradleファイル内に次のコード行を配置します

Android{
      //compielsdkVersion..
      //..
      //..
      vectorDrawables.useSupportLibrary = true
}

そして、CircularImageViewを使用しているActivity.Javaで、次の静的ブロックを次のようにonCreate()メソッドの先頭に配置します。

    //...
   //....
    static {
            AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
        }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
   //...
   //...
2
MrCurious
  1. マニフェストファイルで宣言されたアプリケーションがMultiDexApplicationを拡張していることを確認してください。
  2. build.gradleファイルはマルチデキシングを有効にし、compile 'com.Android.support:multidex:1.0.1'パッケージの依存関係。
  3. Android Studio fast build。によって制御されていないことを確認してください。すべてのビルドディレクトリを削除し、コマンドラインを使用してアプリケーションを使用してインストールできます。
  4. アプリケーションにフレーバーがある場合は、インストールされているフレーバーがMultiDexApplicationを使用していることを確認してください
2
JP Ventura

以前の解決策は問題ありませんが、1つ欠けているものMultiDexApplication

public class FireApp extends MultiDexApplication 
1
amorenew

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+に更新する必要があります。

0
hezi

Android 4.3(API 18)on debug build(リリースはOK)を実行しているSonyデバイスで同じ問題に直面していました。すべてのソリューションを試した後、すべてを正しく行うようにして、まだ問題を修正できませんでした。

Android Studio for some device)を使用してAPKをビルドしてインストールしているときに、Lollipopデバイス用にビルドを一度実行してから、古いバージョン(KitKatより下)では、煩わしいMultiDex installation failedエラーなしで実行されます。

アプリのビルドとテストに最も頻繁に使用する自分のデバイスはAPI28を実行することに注意してください。

0
Sdghasemi

マニフェストのアプリケーションタグにこの行を追加します

Android:name="Android.support.multidex.MultiDexApplication"
0
R.R.M