错误的 dex 文件中的 MultiDexExtractor
MultiDexExtractor in wrong dex file
我有一个应用程序太大,无法放入一个 dex 文件,所以我使用 multidex。当我在某些机器上创建它时它工作正常,但是当我在另一台机器上创建它时,应用程序在某些设备上崩溃,而不是所有设备(在 Note 2 上崩溃,在 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.access00(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)
我反编译了 APK,发现 MultiDexExtractor class 在 classes2.dex 而不是 classes.dex 在它应该在的地方。
我以为 gradle v1.0.0 及更高版本会自动将所有 classes 放入正确的 dex 中?有什么想法吗?
在 gradle 文件中,我添加了
compile 'com.android.support:multidex:1.0.0'
在依赖项中
multiDexEnabled true
在默认配置中
然后在应用文件中:
@Override
public void onCreate() {
MultiDex.install(this);
super.onCreate();
}
我正在使用 android 构建工具 22.0.1
这是我的 gradle 版本:
$ ./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
首先,mutidex 的最新版本是 1.0.1,所以我建议更新您的依赖项。其次,您没有显示整个应用程序 class 但除非您真的知道您需要现在拥有的东西,否则我建议扩展 android.support.multidex.MultiDexApplication
这样您就不需要打扰所有的初始化,因为 MultiDexApplication 会处理这个的。我的应用程序使用 MultiDex 没有问题,但我正在扩展 android.support.multidex.MultiDexApplication
自己。
我有一个应用程序太大,无法放入一个 dex 文件,所以我使用 multidex。当我在某些机器上创建它时它工作正常,但是当我在另一台机器上创建它时,应用程序在某些设备上崩溃,而不是所有设备(在 Note 2 上崩溃,在 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.access00(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)
我反编译了 APK,发现 MultiDexExtractor class 在 classes2.dex 而不是 classes.dex 在它应该在的地方。
我以为 gradle v1.0.0 及更高版本会自动将所有 classes 放入正确的 dex 中?有什么想法吗?
在 gradle 文件中,我添加了
compile 'com.android.support:multidex:1.0.0'
在依赖项中
multiDexEnabled true
在默认配置中
然后在应用文件中:
@Override
public void onCreate() {
MultiDex.install(this);
super.onCreate();
}
我正在使用 android 构建工具 22.0.1
这是我的 gradle 版本:
$ ./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
首先,mutidex 的最新版本是 1.0.1,所以我建议更新您的依赖项。其次,您没有显示整个应用程序 class 但除非您真的知道您需要现在拥有的东西,否则我建议扩展 android.support.multidex.MultiDexApplication
这样您就不需要打扰所有的初始化,因为 MultiDexApplication 会处理这个的。我的应用程序使用 MultiDex 没有问题,但我正在扩展 android.support.multidex.MultiDexApplication
自己。