MultiDexExtractor in wrong dex file

泪湿孤枕 提交于 2019-12-11 03:42:38

问题


I have an app that is too big to fit into one dex file so I'm using multidex. It works fine when i create it on certain machines, but when i create it on another one, the app crashes on some devices, not all (crashes on Note 2, works on Nextus 6).

8519-8519/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.NoClassDefFoundError: android.support.multidex.MultiDexExtractor
            at android.support.multidex.MultiDex.install(MultiDex.java:159)
            at com.myapp.MyApplication.onCreate(MyApplication.java:39)
            at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1014)
            at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4228)
            at android.app.ActivityThread.access$1300(ActivityThread.java:140)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1287)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4898)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1008)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775)
            at dalvik.system.NativeStart.main(Native Method)

I decompiled the APK, and found that the MultiDexExtractor class is in classes2.dex instead of classes.dex where it should be.

I thought gradle v1.0.0 and above is placing all the classes in the correct dex automatically? Any ideas?

In the gradle file, i've added

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

in the dependencies and

multiDexEnabled true

in the default config

Then in the Application file:

@Override
public void onCreate() {
    MultiDex.install(this);
    super.onCreate();
}

I'm using the android build tools 22.0.1

And here are my gradle versions:

$ ./gradlew --version

------------------------------------------------------------
Gradle 2.2.1
------------------------------------------------------------

Build time:   2014-11-24 09:45:35 UTC
Build number: none
Revision:     6fcb59c06f43a4e6b1bcb401f7686a8601a1fb4a

Groovy:       2.3.6
Ant:          Apache Ant(TM) version 1.9.3 compiled on December 23 2013
JVM:          1.8.0_25 (Oracle Corporation 25.25-b02)
OS:           Mac OS X 10.9.5 x86_64

回答1:


First, mutidex recent version is 1.0.1, so I'd suggest updating your dependency. Second, you did not show whole Application class but unless you really know you need what you have now, I'd suggest extending android.support.multidex.MultiDexApplication so you do not need to bother all the init as MultiDexApplication would take care of this. I had no problems with MultiDex with my apps, but I am extending android.support.multidex.MultiDexApplication myself.



来源:https://stackoverflow.com/questions/31754733/multidexextractor-in-wrong-dex-file

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