Android Multidex RuntimeException [英] Android Multidex RuntimeException

查看:230
本文介绍了Android Multidex RuntimeException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试运行具有超过65k方法的Android应用程序的问题。

我已经关注了有关Multidex支持的Google文档,但是我仍然无法成功运行它。似乎问题仅出现在小于21的SDK上,因为当我指定 minSdkVersion 21 时,它运行良好,但是一旦我将其设置为 minSdkVersion 15 ,我得到以下异常。

I am trying to solve a problem with running Android app that has over 65k methods.
I have followed Google docs about Multidex support, however I'm still unable to run it successfully. It seems that the problem appears only on SDK less than 21, because when I specify minSdkVersion 21, it works well, however once I set it to minSdkVersion 15, I am getting following exception.

FATAL EXCEPTION: main
   java.lang.RuntimeException: Unable to instantiate application custom.package.name.MyApplication: java.lang.ClassNotFoundException: Didn't find class "custom.package.name.MyApplication" on path: DexPathList[[zip file "/data/app/custom.package.name-2/base.apk"],nativeLibraryDirectories=[/data/app/custom.package.name-2/lib/arm, /vendor/lib, /system/lib]]
      at android.app.LoadedApk.makeApplication(LoadedApk.java:578)
      at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4680)
      at android.app.ActivityThread.-wrap1(ActivityThread.java)
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405)
      at android.os.Handler.dispatchMessage(Handler.java:102)
      at android.os.Looper.loop(Looper.java:148)
      at android.app.ActivityThread.main(ActivityThread.java:5417)
      at java.lang.reflect.Method.invoke(Native Method)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

   Caused by: java.lang.ClassNotFoundException: Didn't find class "custom.package.name.MyApplication" on path: DexPathList[[zip file "/data/app/custom.package.name-2/base.apk"],nativeLibraryDirectories=[/data/app/custom.package.name-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 android.app.Instrumentation.newApplication(Instrumentation.java:981)
      at android.app.LoadedApk.makeApplication(LoadedApk.java:573)
      at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4680) 
      at android.app.ActivityThread.-wrap1(ActivityThread.java) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:148) 
      at android.app.ActivityThread.main(ActivityThread.java:5417) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
   Suppressed: java.io.IOException: Failed to open dex files from /data/app/custom.package.name-2/base.apk
      at dalvik.system.DexFile.openDexFileNative(Native Method)
      at dalvik.system.DexFile.openDexFile(DexFile.java:295)
      at dalvik.system.DexFile.<init>(DexFile.java:80)
      at dalvik.system.DexFile.<init>(DexFile.java:59)
      at dalvik.system.DexPathList.loadDexFile(DexPathList.java:279)
      at dalvik.system.DexPathList.makePathElements(DexPathList.java:248)
      at dalvik.system.DexPathList.<init>(DexPathList.java:120)
      at dalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java:48)
      at dalvik.system.PathClassLoader.<init>(PathClassLoader.java:65)
      at android.app.ApplicationLoaders.getClassLoader(ApplicationLoaders.java:58)
      at android.app.LoadedApk.getClassLoader(LoadedApk.java:376)
      at android.app.LoadedApk.makeApplication(LoadedApk.java:568)
            ... 9 more
   Suppressed: java.lang.ClassNotFoundException: custom.package.name.MyApplication
      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)
            ... 12 more
   Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available

致命异常之前的Logcat

W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/custom.package.name-2/base.apk --oat-file=/data/dalvik-cache/arm/data@app@custom.package.name-2-2@base.apk@classes.dex) because non-0 exit status
W/art: Failure to verify dex file '/data/app/ccustom.package.name-2-2/base.apk': Invalid method name: '_clinit@1433781298707#0'
W/System: ClassLoader referenced unknown path: /data/app/custom.package.name-2-2/lib/arm

这是我到目前为止所做的:

Here is what I've done so far:


  • 创建的名为MyAppl的类扩展应用程序并在AndroidManifest.xml文件中指定的

将依赖项添加到build.gradle文件

编译'com.android.support:multidex:1.0.1'

在build.gradle中启用了multidex

multiDexEnabled true

在MyApplication类中启用multidex

@Override
protected void attachBaseContext(Context base){
super.attachBaseContext(base);
MultiDex.install(this);
}

预先感谢您的帮助!

推荐答案

3天后,通过删除导致它的一个依赖项解决了它。

After 3 days its solved by removing one of dependencies which caused it.

编辑:正如@Asprelis指出的那样,造成问题的lib是 net.java.truelicense

EDIT: As @Asprelis pointed out, the lib which was causing problems is net.java.truelicense

这篇关于Android Multidex RuntimeException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆