问题
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:
- Make sure the application declared in the manifest file extends
MultiDexApplication
. - Make sure your
build.gradle
file enabled multidexing and included thecompile 'com.android.support:multidex:1.0.1'
package dependency. - 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.
- 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