I am trying to solve a problem with an Android application running, which has more than 65 thousand methods.
I have been following Google's docs about Multidex support, but I still cannot launch it successfully. It seems that the problem only appears on the SDK less than 21, because when I specify minSdkVersion 21 , it works well, however, as soon as I set it to minSdkVersion 15 , I get the 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 before fatal exception
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 have done so far:
the created MyApplication class, which extends the application and points it to the AndroidManifest.xml file
add dependency for build.gradle file
compile 'com.android.support:multidex:1.0.1'
multidex enabled in build.gradle
multiDexEnabled true
multidex is enabled in the MyApplication @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); }
Thanks in advance for your help!
source share