2016-09-20 3 views
0

Ich erstelle ein Bibliotheksprojekt in Android. Ich möchte pro-Wache ermöglichen, aber ich habe den folgenden Absturz:Android Progard mit Volley: ClassNotFoundException: Klasse "com.android.volley.VolleyLog" nicht gefunden

Process: com.mysdk.myapplication, PID: 15629 
    java.lang.NoClassDefFoundError: Failed resolution of: Lcom/android/volley/VolleyLog; 
    at com.mysdk.sdk.api.b.a(Unknown Source) 
    at com.mysdk.sdk.api.mysdk.startmysdk(Unknown Source) 
    at com.mysdk.myapplication.App.onCreate(Unknown Source) 
    at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1026) 
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5099) 
    at android.app.ActivityThread.access$1600(ActivityThread.java:150) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1464) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:168) 
    at android.app.ActivityThread.main(ActivityThread.java:5885) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:819) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:709) 
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.android.volley.VolleyLog" on path: DexPathList[[zip file "/data/app/com.mysdk.myapplication-1/base.apk"],nativeLibraryDirectories=[/data/app/com.mysdk.myapplication-1/lib/arm64, /vendor/lib64, /system/lib64]] 
    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 com.mysdk.sdk.api.b.a(Unknown Source) 
    at com.mysdk.sdk.api.mysdk.startmysdk(Unknown Source) 
    at com.mysdk.myapplication.App.onCreate(Unknown Source) 
    at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1026) 
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5099) 
    at android.app.ActivityThread.access$1600(ActivityThread.java:150) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1464) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:168) 
    at android.app.ActivityThread.main(ActivityThread.java:5885) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:819) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:709) 
Suppressed: java.lang.ClassNotFoundException: com.android.volley.VolleyLog 
    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) 
    ... 14 more 
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available 

In meiner Bibliothek Projekt habe ich eine proguard-rules.pro Datei mit dem konfigurierte folgend:

-keep class com.android.volley.** { *; } 
-keep interface com.android.volley.** { *; } 
-keepclassmembers class com.android.volley.VolleyLog { *; } 
-keep class org.apache.commons.logging.** { *; } 

ich einige gefunden Lösungen im Web (z. B. Hinzufügen der Apache-Linie zu meiner Pro-Guard-Datei), aber es hat nicht funktioniert. Irgendwelche Vorschläge? Was vermisse ich?

Danke.

Antwort

1

Die Anweisung

-keepclassmembers class com.android.volley.VolleyLog { *; } 

ProGuard die Klassenmitglieder (Methoden, Felder, usw.), aber es immer noch den Namen der tatsächlichen Klasse verschleiern lässt zu halten erzählt, was bedeutet, dass es wie „aaba etwas umbenannt werden "in der APK.

ein Tool wie ClassyShark können Sie überprüfen, ob com.android.volley.VolleyLog in der APK und dann die Regel, wenn die Nichtberücksichtigung von ändern:

-keep class com.android.volley.VolleyLog { *; } 

die Namen der Klasse zu machen ProGuard zu bewahren.

0

Meistens Instant Run-Funktion von Android Studio erstellen solche Probleme mit verschiedenen Klassennamen einige Zeit MainApplication Class nicht gefunden ... ich konfrontiert auch diese Probleme viele Male aber weder Clean, Rebuild löste mein Problem noch Multidex Schritte Mein Problem gelöst, aber wenn ich Instant Run ausgeschaltet dann begann meine App normalerweise anstelle diesem Runtime-Crash oder Absturz beim Starten der App-Arbeits

dieses Just do .. Check Datei -> Einstellungen -> Build, Ausführung, Deployment -> Instant Run und Aktivieren Sie es, wenn es ausgeschaltet ist oder deaktivieren Sie es, wenn es eingeschaltet ist

Verwandte Themen