Multidex安装失败

时间:2017-03-22 11:14:18

标签: java android multidex

我使用的是CircledImageView库。它适用于棒棒糖+ Android版本。但在kitkat,它崩溃了。所以在谷歌搜索后。我发现我必须在我的应用程序中实现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)

10 个答案:

答案 0 :(得分:3)

尝试在compile 'com.android.support:multidex:1.0.1'文件中加入build.gradle

答案 1 :(得分:3)

检查以下步骤

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"

答案 2 :(得分:2)

  1. 确保清单文件中声明的应用程序扩展为MultiDexApplication
  2. 确保您的build.gradle文件已启用多索引并包含compile 'com.android.support:multidex:1.0.1'包依赖项。
  3. 确保您没有受到Android Studio快速构建的影响。您可以删除所有构建目录,并使用命令行使用该应用程序进行安装。
  4. 如果您的应用程序有风味,请确保已安装的风味使用MultiDexApplication

答案 3 :(得分:2)

试试这个 在你的应用程序级别build.gradle文件中放入以下代码行

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

并在您使用CircularImageView的Activity.java中将以下静态块放在onCreate()方法的顶部,如下所示

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

    @Override
    protected void onCreate(Bundle savedInstanceState) {
   //...
   //...

答案 4 :(得分:1)

之前的解决方案还可以,但缺少一件事 的 MultiDexApplication

public class FireApp extends MultiDexApplication 

答案 5 :(得分:0)

在清单

中的应用标记中添加此行
android:name="android.support.multidex.MultiDexApplication"

答案 6 :(得分:0)

在API 19和20上,库试图保存“抑制的异常” 在loader.dexElementsSuppressedExceptions中。

但是该字段不存在,它在DexPathList中,所以正确的路径是 loader.pathList.dexElementsSuppressedExceptions。

Google已修复它:https://android.googlesource.com/platform/frameworks/multidex/+/74e66b8013b5b9002f67e53825c189a18597b1e8%5E%21/#F0

您需要将multidex版本更新为1.0.2 +。

答案 7 :(得分:0)

我在运行 debug 构建(发布还可以)的Android 4.3(API 18)的Sony设备上遇到了相同的问题。在尝试了每种解决方案并确保正确完成所有操作后,我仍然无法解决该问题。

在使用Android Studio为多个设备构建和安装APK时,我偶然发现,如果我尝试一次为Lollipop设备构建 ,然后为旧版本构建(在KitKat下) )它将运行,而不会出现烦人的MultiDex installation failed错误。

请注意,我最常用于构建和测试应用程序的设备运行API 28。

答案 8 :(得分:-2)

尝试包括 build.gradle文件中的compile 'com.android.support:multidex:1.0.1'。

答案 9 :(得分:-2)

这是kitkat multidex中的错误,你可以覆盖V19.install,因为dexElementsSuppressedExceptions是dexPathList中的字段,而不是加载器中的字段。但是,当dalvik执行makeDexElements时会出现异常,但是您收到了错误的消息enter image description here