2017-03-16 4 views
4

Ich versuche mein Verständnis über die Verwendung von ProGuard für Android Build zu verbessern. Bin nicht sehr sicher, was genau zu halten (was nicht zu verschleiern) und was zu verschleiern.ProGuard - Wie wird es richtig für Android verwendet? Welche Klassen und Bibliotheken halten Sie?

Paar von Bibliotheken in meiner App verwendet werden, einige von ihnen sind unten aufgeführt

com.android.support:appcompat 
com.android.support:design 
io.reactivex:rxandroid 
io.reactivex:rxjava 
com.jakewharton.rxbinding 
com.trello:rxlifecycle 

Frage 1:

Soll ich über Bibliotheken zu verschleiern? sie sind bereits Open Source .. wird es nicht klug, alle Support-Bibliotheken zu halten proguard Regel:

keep class android.support.** { *; }

ähnlich wie ich mit io.reactivex und jakewharton Bibliotheken tun können

Frage 2

Neben Support und externen Bibliotheken habe ich anwendungsspezifische Klassen, die für diese Anwendung codiert sind. Ist es in Ordnung, die Klassennamen zu behalten, die in AndroidManifest.xml und speziell ihre öffentlichen Mitglieder erwähnt werden, und den Rest des Codes verschleiern zu lassen?

Lassen Sie mich wissen, wenn ich etwas vermisse oder mein Verständnis nicht korrekt ist. nur um dies zu wiederholen, ist es keine Frage, wie man es technisch macht, sondern mehr darüber, was man einbeziehen soll und was man für die Verschleierung/Optimierung/Schrumpfung ausschließen kann ... und genauer gesagt Grund dahinter .... Definitiv wird es danach Espresso-getestet sein bauen.

Antwort

2

Frage 1: Sollte ich über Bibliotheken obfuscate?

Ja. Wenn Sie -keep <library> Regeln hinzufügen, wird die gesamte Bibliothek in Ihrem APK enthalten sein, was zu Problemen führt, z. B. dazu, dass Ihre App das 64k-Methodenlimit überschreitet und Multidex erfordert. Es ist immer eine gute Idee, die von der Bibliothek bereitgestellten ProGuard-Regeln anzuwenden. Normalerweise finden Sie .pro Dateien im Quellcode der Bibliotheken oder in Websites wie https://github.com/krschultz/android-proguard-snippets.

Frage 2: Ist es in Ordnung, die Klassennamen zu behalten, die in AndroidManifest.xml und speziell ihre öffentlichen Mitglieder erwähnt werden, und den Rest des Codes verschleiern.

Das Android-Plugin macht das schon für Sie. Das Plugin durchsucht alle Klassen, deren Namen beibehalten werden müssen (z. B. Aktivitäten, Dienste, BroadcastReceiver, Ansichten usw.) und verschleiert sie nicht. Dies umfasst alles, was Sie in AndroidManifest.xml deklarieren.

+0

Danke, ich hatte die Schrumpfoption von ProGuard übersehen .. stimme zu, dass wir relevante Websites für die jeweilige ProGuard-Konfiguration verweisen können. Aber wie wäre es mit Google Specific Libraries..i. com.android.support:appcompat wo finden wir config für die .. In Bezug auf Ihre Antwort für Frage 2 für anwendungsspezifischen Code ... Meinst du .. wir sollten keine Einstellungen .. für unseren eigenen Code ..? und in diesem Fall .. application specific code .. die in AndroidManifest erwähnt wird immer offen für dekompilieren ..? – Girish

+0

Einige Bibliotheken, nämlich 'com.android.support: appcompat', benötigen keine expliziten Regeln, um mit ProGuard als Standardkonfiguration zu arbeiten, die Android Plugin spezifiziert, fängt bereits alle Randfälle (zB Ansichten, Fragmente), während andere Bibliotheken (wie 'rxjava') benötigt möglicherweise explizite Regeln.Es variiert von Fall zu Fall und das Beste, was zu tun ist, ist in der Dokumentation jeder Bibliothek nach einem Abschnitt über ProGuard-Regeln zu suchen. –

+0

In Bezug auf "unseren eigenen Code" gibt die Standardkonfiguration im Android Plugin bereits viele Regeln vor, die auf Ihre App angewendet werden. Durch Aktivieren von "Minimieren" wird ProGuard bereits so viel wie möglich verschleiern. Aber Sie haben Recht mit AndroidManifest .. bestimmte Klassen/Methoden/Felder können nicht effektiv verschleiert werden (zB 'Activity.onCreate (Bundle)' wird immer aufgerufen, weil es extern aufgerufen wird), also ist ein Trick, den Sie tun, so viel zu bewegen code wie möglich aus deinen Aktivitäten/Fragmenten/Sichten in separate Hilfsobjekte und lass dann ProGuard sie verschleiern :) –

Verwandte Themen