2012-06-10 12 views
18

Hallo Ich schreibe eine Android App und ich habe Proguard eingerichtet, um meine Anwendung zu verschleiern. Ich verwende jedoch einen Klassenlader, um verschiedene Erweiterungen dynamisch zu meiner Anwendung zu laden. Das Problem ist, dass diese nicht korrekt geladen werden, wenn ihre Namen geändert werden. Wie verhindere ich, dass Proguard bestimmte Klassennamen verschleiert?Proguard Klassennamen beibehalten?

Antwort

27

Verwenden Sie die -keepnames Option in Ihrem proguard.cfg

https://www.guardsquare.com/en/proguard/manual/usage#keepoptions zum Handbuch Siehe:

-keepnames class_specification

Short für -keep,allowshrinking class_specification

Gibt Klassen und Klassenmitglieder, deren Namen sind zu erhalten, wenn sie nicht sind In der Schrumpfphase nicht entfernt. Beispielsweise möchten Sie möglicherweise alle Klassennamen von Klassen beibehalten, die die Serializable-Schnittstelle implementieren, sodass der verarbeitete Code mit allen ursprünglich serialisierten Klassen kompatibel bleibt. Klassen, die überhaupt nicht verwendet werden, können weiterhin entfernt werden. Nur anwendbar beim Verschleiern.

+3

Also tippe ich: -keepnames com.randompackage.lol.ClassName – Nik

+0

Ok gibt es eine Möglichkeit, es mit einem ganzen Paket zu tun? – Nik

+0

Ja, Sie verwenden den Platzhalter *. ie -keepnames com.randompackage.lol. * Behalte alle Klassen in lol –

24

Das hält Klassennamen intakt:

-keepnames class com.somepackage.* 
9

Praktischer Tipp für alle, die nicht ProGuard will jede Klassennamen ändern:

# please KEEP ALL THE NAMES 
-keepnames class ** { *; } 

Auf diese Weise können lesbar Stack-Traces bekommen während du immer noch Dinge rausschmeißt, die du nicht brauchst. :-)

+9

'' '-dontobfuscate''' ist der richtige Weg, die Verschleierung zu deaktivieren. –

+0

Falscher Weg. Es ist besser, die Verschleierung mit dieser Konfiguration zu deaktivieren: "-dontobfuscate/n -optimizations! Code/allocation/variable" – oxied