2014-02-13 10 views
5

Ich versuche Proguard zu konfigurieren, aber ich kann es nicht funktionieren.Ausführen von ProGuard mit AQuery-Bibliothek

Dies ist der Fehler: enter image description here

Ich habe versucht, Dinge wie:

-keep class com.android.auth.TwitterHandle.** { *; } 
-keep class oauth.** { *; } 

ohne Erfolg.

Wie auch immer, ich glaube nicht, Ignorieren ist die Antwort. Weil das bedeuten könnte, dass etwas kaputt ist.

Irgendwelche Tipps?

Danke!

Antwort

8

Die Warnungen zeigen an, dass die AndroidQuery-Bibliothek von der OAuth-Bibliothek abhängt. Anscheinend verwenden Sie die frühere Bibliothek in Ihrem Projekt, aber die letztere Bibliothek fehlt. Sie könnten die fehlende Bibliothek hinzufügen, aber wenn Ihre Anwendung im Debug-Modus einwandfrei funktioniert, können Sie ProGuard einfach anweisen, die fehlende Abhängigkeit zu ignorieren. In diesem Fall:

-dontwarn com.androidquery.auth.** 

oder, um den gleichen Effekt:

-dontwarn oauth.signpost.** 

das ProGuard Handbuch Siehe> Fehlerbehebung>Warning: can't find referenced class

(Ich bin der Entwickler von ProGuard)

1

Bitte versuchen Sie diesen Beitrag https://stackoverflow.com/a/15477898/1665964

Insert überspringen in ProGuard verschleiert Ihre Libs, Gläser, Klassen und Unterklassen mit diesem Beispiel

-optimizationpasses 5 
-dump class_files.txt 
-printseeds seeds.txt 
-printusage unused.txt 
-printmapping mapping.txt 
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 
-allowaccessmodification 
-repackageclasses '' 

-keep public class * extends android.app.Activity 
-keep public class * extends android.app.Application 
-keep public class * extends android.app.MapActivity 
-keep public class * extends android.app.Service 
-keep public class * extends android.content.BroadcastReceiver 
-keep public class * extends android.content.ContentProvider 

-libraryjars libs/commons-io-2.2.jar 
-libraryjars libs/gson-2.2.2.jar 
-keep public class org.apache.commons.io.** 
-keep public class com.google.gson.** 
-keep public class com.google.gson.** {public private protected *;} 

##---------------Begin: proguard configuration for Gson ---------- 
-keepattributes Signature 
-keepattributes *Annotation* 
-keep class com.mypackage.ActivityMonitor.ClassMultiPoints.** { *; } 
-keep public class com.mypackage.ActivityMonitor$ClassMultiPoints  { public protected *; } 
-keep public class com.mypackage.ActivityMonitor$ClassMultiPoints$ClassPoints { public protected *; } 
-keep public class com.mypackage.ActivityMonitor$ClassMultiPoints$ClassPoints$ClassPoint { public protected *; } 
##---------------End: proguard configuration for Gson ---------- 
1

Der Grund für Fehler sein muss, dass Sie verwenden könnten eine externe JAR-Datei (im libs-Ordner).

Wenn dies der Fall ist, sollte das Hinzufügen der folgenden Zeile vor -keep class ... Zeilen Ihr Problem lösen.

-libraryjars libs/<jar_filename>

3

diese Zeilen zu Ihrer proguard Datei hinzufügen.

-dontwarn oauth.** 
-dontwarn com.android.auth.TwitterHandle.** 

-keep class oauth.** { *; } 
-keep class com.android.auth.TwitterHandle.** { *; } 

Edit:

Anyways, I don't really think ignoring is the answer. Because that might mean something is broken.

Wenn Sie Proguard verwenden und einige Fehler haben wie Klasse nicht gefunden wird, dann müssen Sie deaktivieren/ignorieren ihre Verschleierung. Weil Proguard beim Verschleiern Namen, Felder und Methoden von Klassen umbenennt. Dies wird zu einem großen Problem, wenn für diese Klassen eine Reflexion verwendet wird. Man muss also sagen, dass man einige Klassen ignorieren (nicht verschleiern) sollte, um dieses Problem zu vermeiden.

1

Wenn Sie sind nicht vertraut mit Progard Cmd-Tool, dann können Sie versuchen, Proguard GUI unter tools/proguard/lib/proguardgui Ihres Android SDK-Ordners.

öffnen Sie proguardgui und laden Sie Ihre Konfigurationsdatei.

Dann in Eingabe/Ausgabe Abschnitt fügen Sie Ihre Eingabe und Ausgabe jar sowie Hinzufügen Ihrer Android-Bibliothek in Ihrem Projekt verwendet. add your libs ***** Ihr Hauptproblem besteht darin, dass Sie Ihre Bibliothek (Aquery.jar und andere), die in Ihrem Projekt verwendet wird, nicht hinzugefügt haben, damit Proguard die erforderlichen Klassen nicht finden kann. ***