Multidex installation failure

2019-04-18 20:45发布

问题:

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:

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



回答8:

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