5

Ich versuche, ein Problem mit Android-App, die über 65k Methoden ausgeführt hat, zu lösen.
Ich habe die Google Docs über die Unterstützung von Multidex verfolgt, kann sie aber immer noch nicht erfolgreich ausführen. Es scheint, dass das Problem nur auf SDK weniger als 21 erscheint, denn wenn ich minSdkVersion 21 angeben, funktioniert es gut, aber sobald ich es auf minSdkVersion 15 setze, bekomme ich folgende Ausnahme.Android Multidex RuntimeException

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 vor schwerwiegenden Ausnahme

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/[email protected]@[email protected]@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: '[email protected]#0' 
W/System: ClassLoader referenced unknown path: /data/app/custom.package.name-2-2/lib/arm 

Hier ist, was ich bisher getan habe:

  • genannt MyApplication erstellt Klasse, die Anwendung es erweitert und spezifiziert in AndroidManifest .xml-Datei

  • hinzugefügt Abhängigkeitsdatei

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

  • aktiviert multidex in build.gradle

    multiDexEnabled true

  • aktiviert multidex in MyApplication Klasse build.gradle

Vielen Dank im Voraus für jede Hilfe!

+1

haben Sie versucht, mit MultiDexApplication erstreckt, erstreckt sich statt Anwendungs ? –

+0

Ja, ich habe es versucht, aber das immer noch das gleiche Problem – jpact

Antwort

-2

Nach 3 Tagen seine gelöst durch eine von Abhängigkeiten zu entfernen, die sie verursacht hat.

EDIT: Wie @Asprelis wies darauf hin, die lib, die Probleme verursacht wurde ist net.java.truelicense

+0

Können Sie uns sagen, welche Abhängigkeit das verursacht hat? – kientux

+0

Ich erinnere mich nicht an den genauen Namen, aber es war eine 3rd Party Lib zur Verschleierung von String-Literalen – jpact

2

die Sie interessieren, ist dies für mich zu arbeiten, so ziemlich von einem aktuellen Projekt kopiert ....

build.gradle

android { 
compileSdkVersion 23 
buildToolsVersion "22.0.1" 
defaultConfig { 
    applicationId "my.package.name" 
    minSdkVersion 16 
    targetSdkVersion 23 
    multiDexEnabled = true 
    versionCode 3 
    versionName "0.1.2" 
    renderscriptTargetApi 14 
    renderscriptSupportModeEnabled true 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.android.support:appcompat-v7:23.1.1' 
    compile 'com.android.support:multidex:1.0.1' 
} 

Anwendungsklasse

public class MyApp extends MultiDexApplication { 

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

Manifest

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

... 

    <application 
    android:name=".MyApp" 
    android:allowBackup="true" 
    android:hardwareAccelerated="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 

... 

Es ist erwähnenswert, dass ich ein ähnliches Problem hatte, bis ich die Leseberechtigung hinzugefügt und erweitert MultiDexApplication

+0

Danke für die Antwort! Nun, ich habe bereits versucht, MultiDexApplication zu verwenden, aber das gleiche Problem. Hinweis: Ich verwende auch read_external_storage:/ – jpact

+0

@Creck verwenden Sie auch die Berechtigung WRITE_EXTERNAL? es kann sein, dass die min-versionsnummern nicht übereinstimmen –

+0

Ja, ich tue. Aber ausnahmsweise scheint es, dass es nichts mit externem Speicher zu tun hat, da apk in/data/app/... gespeichert wird. – jpact

1

Problem wegen dieser obfuscator ist:

<dependency> 
     <groupId>net.java.truelicense</groupId> 
     <artifactId>truelicense-obfuscate</artifactId> 
     <version>${truelicense.obfuscate.version}</version> 
    </dependency> 
+0

Genau, das ist das lib. Vielen Dank – jpact