2013-07-26 15 views
16

Was wäre eine intelligente ProGuard-Konfiguration, um nur die privaten Methoden und Konstanten einer bestimmten Klasse com.acme.Algorithm zu verschleiern?Wie kann ich mit ProGuard nur eine Klasse verschleiern?

Ich möchte genau das verschleiern, weil es einen Algorithmus enthält, der beim Öffnen der .jar-Datei nicht offensichtlich sein sollte.

Ich bin ein ProGuard Neuling. AFAIU, du musst "keep" verwenden, aber die positive Logik von "do obfuscate" ist nicht verfügbar, oder? Also wie kann ich meine Klasse von einer "keep everything" -Konfiguration ausschließen? Hinweis: Ich möchte im Moment keine anderen Klassen verschleiern, weil ich dem Kunden erlauben möchte, aussagekräftige Stacktraces zu sehen.

Antwort

22

Die Verschleierung einer einzelnen Klasse hat keine großen Auswirkungen: Sie kann den Klassennamen und einige Feldnamen und Methodennamen ändern, wodurch möglicherweise ein Teil des Codes optimiert wird. Verschleierung neigt dazu, weniger effektiv zu sein, um kleine Informationen zu verbergen. Je mehr Anwendungscode Sie verdecken, desto schwieriger wird es zu verstehen.

Dass gesagt wird, können Sie angeben:

-keep class !com.acme.Algorithm { *; } 

Es hält alle Klassen/Felder/Methoden außerhalb von com.acme.Algorithm.

+0

Mein Problem ist: es immer noch versuchen, andere Klassen zu verschleiern, selbst wenn ich über Zeile gesetzt habe. Wie konnte das passieren? – Jacky

+0

Ich habe auch das gleiche Problem wie @Jacky Any Zeiger, um das Problem zu lösen –

Verwandte Themen