Multidex installation failure

微笑、不失礼 提交于 2019-12-06 17:17:41

问题


I'm using CircledImageView library. It works fine on lollipop+ android versions. But in kitkat it's crashing. So after searching on google. I found that i have to implement multidex in my app.

So this my application class.

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);
    }
}

And in build.gradle under defaultconfig MultiDexEnabled is true

multiDexEnabled true

But when I run the app, I get the following error.

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)

回答1:


Try including compile 'com.android.support:multidex:1.0.1' in your build.gradle file.




回答2:


check following steps this steps

1) Add dependency in your build.gradle file :

compile 'com.android.support:multidex:1.0.0'

2) Enable multidex and set heap size

defaultConfig {
    applicationId "your package name"
    minSdkVersion 19
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
    multiDexEnabled true
}

dexOptions {
    javaMaxHeapSize "4g"
}

3) In Application class add this

@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}

4) Add this in your manifest in <application> tag :

android:name=".YourApplicationClassName"



回答3:


  1. Make sure the application declared in the manifest file extends MultiDexApplication.
  2. Make sure your build.gradle file enabled multidexing and included the compile 'com.android.support:multidex:1.0.1' package dependency.
  3. Make sure your are not being trolled by Android Studio fast build. You can remove all build directories and install using the application using command line.
  4. If your application has flavours, make sure the installed flavor is using MultiDexApplication



回答4:


Try this Inside your app level build.gradle file put the following line of code

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

and in the Activity.java that you are using the CircularImageView put the following static block on the top of onCreate() method like this

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

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



回答5:


previous solutions are ok but one missing thing MultiDexApplication

public class FireApp extends MultiDexApplication 



回答6:


Add this line in your application tag in your manifest

android:name="android.support.multidex.MultiDexApplication"



回答7:


On API 19 and 20, the library was trying to save "suppressed exceptions" in the loader.dexElementsSuppressedExceptions.

But the field is not there, it's in DexPathList, so the correct path is loader.pathList.dexElementsSuppressedExceptions.

Google has fixed it: https://android.googlesource.com/platform/frameworks/multidex/+/74e66b8013b5b9002f67e53825c189a18597b1e8%5E%21/#F0

You need to update multidex version to 1.0.2+.




回答8:


I was facing the same problem on a Sony device running Android 4.3 (API 18) on debug build (release was ok). After trying every single solution out there and making sure to do everything right I was still not able to fix the issue.

As I was building and installing my APK using Android Studio for several devices I accidently found that if I try to build it for a Lollipop device once and then build it for an older version (below KitKat) it will run without the annoying MultiDex installation failed error.

Note that my own device which I use most often to build and test the app runs API 28.




回答9:


this is a error in kitkat multidex,u can override the V19.install, cause dexElementsSuppressedExceptions is the field in dexPathList, not in loader. However, there is exception when dalvik do makeDexElements, but you get the wrong message insteadenter image description here




回答10:


try including compile 'com.android.support:multidex:1.0.1' in your build.gradle file.



来源:https://stackoverflow.com/questions/42950044/multidex-installation-failure

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!