java.lang.NoClassDefFoundError: Failed resolution

2019-02-25 22:39发布

问题:

My app works perfectly when you run it on API 23 - 25, but on API 21 & 22 it crashes with the following error:

12-12 15:01:18.436 27069-27069/com.platinum.hydro E/AndroidRuntime: FATAL EXCEPTION: main
   Process: com.platinum.hydro, PID: 27069
   java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v4/util/ArrayMap;
       at com.google.firebase.FirebaseApp.<clinit>(Unknown Source)
       at com.google.firebase.provider.FirebaseInitProvider.onCreate(Unknown Source)
       at android.content.ContentProvider.attachInfo(ContentProvider.java:1751)
       at android.content.ContentProvider.attachInfo(ContentProvider.java:1726)
       at com.google.firebase.provider.FirebaseInitProvider.attachInfo(Unknown Source)
       at android.app.ActivityThread.installProvider(ActivityThread.java:5319)
       at android.app.ActivityThread.installContentProviders(ActivityThread.java:4893)
       at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4833)
       at android.app.ActivityThread.access$1500(ActivityThread.java:178)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1531)
       at android.os.Handler.dispatchMessage(Handler.java:111)
       at android.os.Looper.loop(Looper.java:194)
       at android.app.ActivityThread.main(ActivityThread.java:5631)
       at java.lang.reflect.Method.invoke(Native Method)
       at java.lang.reflect.Method.invoke(Method.java:372)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
    Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.v4.util.ArrayMap" on path: DexPathList[[zip file "/data/app/com.platinum.hydro-2/base.apk"],nativeLibraryDirectories=[/data/app/com.platinum.hydro-2/lib/arm, /vendor/lib, /system/lib]]
       at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
       at com.google.firebase.FirebaseApp.<clinit>(Unknown Source) 
       at com.google.firebase.provider.FirebaseInitProvider.onCreate(Unknown Source) 
       at android.content.ContentProvider.attachInfo(ContentProvider.java:1751) 
       at android.content.ContentProvider.attachInfo(ContentProvider.java:1726) 
       at com.google.firebase.provider.FirebaseInitProvider.attachInfo(Unknown Source) 
       at android.app.ActivityThread.installProvider(ActivityThread.java:5319) 
       at android.app.ActivityThread.installContentProviders(ActivityThread.java:4893) 
       at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4833) 
       at android.app.ActivityThread.access$1500(ActivityThread.java:178) 
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1531) 
       at android.os.Handler.dispatchMessage(Handler.java:111) 
       at android.os.Looper.loop(Looper.java:194) 
       at android.app.ActivityThread.main(ActivityThread.java:5631) 
       at java.lang.reflect.Method.invoke(Native Method) 
       at java.lang.reflect.Method.invoke(Method.java:372) 
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959) 
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754) 
    Suppressed: java.lang.ClassNotFoundException: android.support.v4.util.ArrayMap
       at java.lang.Class.classForName(Native Method)
       at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
       at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
            ... 18 more
    Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available

回答1:

Just moving the comments into an answer.

The 9.8.0 version of the firebase library is outdated and might not work well with the other support libraries.

Try using the current version. (10.0.1 as of this answer). You'll also need to update the other Play Services dependencies accordingly



回答2:

Actually , There is one more reason of this issue : When we using gradle build with :

compile 'com.google.android.gms:play-services:xxxx'

We had to compile the entire package of APIs into our app.In some cases, doing so made it more difficult to keep the number of methods in our app (including framework APIs, library methods, and your own code) under the 65,536 limit. So the solution: we should build with only packages which we use : Example :

compile 'com.google.android.gms:play-services-analytics:x.x.x'
compile 'com.google.android.gms:play-services-gcm:x.x.x'

More detail : https://developers.google.com/android/guides/setup