plusone

26. Juli 2011

Android, Proguard und Obfuscation

Da bin ich wieder und mit neuem Wissen zum Verbreiten.

Ich habe vor euch mit Obfuscation vertraut zu machen.
Der Begriff Obfuscator (engl. obfuscate „verdunkeln“, „verwirren“) bzw. Quelltextverschleierung bezeichnet ein Mittel zur Verschleierung von Programmcode.

Ein Obfuscator ist eine Funktionsfamilie mit folgenden Eigenschaften:

  1. Er muss die Funktionalität des Originalprogramms erhalten,
  2. Der verschleierte Code darf höchstens polynomiell langsamer ausführbar sein als das Originalprogramm
  3. Der verschleierte Code verhält sich wie eine Black Box, d. h. er darf keine Information über seinen internen Zustand nach außen durchdringen lassen


Quelle: WIKI

Dazu habe ich genutzt:
Also CrashKurs wo ihr alldiese Information auch in English bekommt.
android-developers.blogspot.com
developer.android.com

Diese Schritte habe ich benutzt, um mein Ziel zu erreichen. Eine mit Ant erstellte und Signierte APP, die durch ProGuard Größe einspart und den Quelltext unkenntlich maskiert.
  1. Installieren und einrichten von Ant und ProGuard (den Rest solltet ihr als Android-Developer schon haben)
    1. Herunterladen und in Ordner entpacken, am besten ohne Leerzeichen
    2. Umgebungsvariablen PATH, ANT_HOME, PROGUARD_HOME setzten bzw. aktualisieren. HIER eine gute Beschreibung dafür. Bei mir lauten diese z.B.:
      1. ANT_HOME = D:\Programme\apache-ant-1.8.2
      2. PROGUARD_HOME = D:\Programme\proguard4.6
      3. PATH = C:\Program Files (x86)\Java\jdk1.6.0_20\bin;D:\Programme\apache-ant-1.8.2\bin;D:\android\android-sdk-windows\platform-tools;D:\android\android-sdk-windows\tools
  2. CMD starten und in euren "workspace" wechseln. Bei mir verlief dies so:
    1. C:\> D:
    2. D:\> cd android\workspace
    3. D:\android\workspace>
  3. build.xml von Android-Tools erstellen lassen und mit Ant ein release anfertigen.
    1. D:\android\workspace> android update project --path ./WIFIonsafetyGeoPoints (ihr erhaltet die build.xml, die für Ant gebraucht wird)
    2. D:\android\workspace> cd WIFIonsafetyGeoPoints
    3.  D:\android\workspace\WIFIonsafetyGeoPoints> ant release (dann braucht Ant eine Weile und ihr müsstet am End ein "BUILD SUCCESS" sehen, wenn nicht, guckt euch die Fehlermeldung wenige Zeilen davon an! Diese ist sehr aufschlussreich, auch für Mr Google) 
    4. Damit habt ihr erfolgreich, eure App mit Ant erstellt. Zufinden ist diese unter bin/WIFIosGeoP-released.apk.
  4. Signatur und ProGuard kommen nun ins Spiel
    1. Mit Keytool store und alias erstellen (fals nicht vorhanden)
    2. WIFIonsafetyGeoPoints\local.properties die beiden Einträge key.store=C:\\Program\ Files\ (x86)\\Java\\jdk1.6.0_20\\bin\\debug.keystore und key.alias=alexroid hinzufügen.
    3. Die beiden Dateien add-proguard-release.xml und procfg.txt runteladen und ins Projektverzeichnis einfügen.
    4. WIFIonsafetyGeoPoints\local.properties neuen Eintrag proguard.dir=D:/Programme/proguard4.6/lib hinzufügen
    5. Die obere Zeile der build.xml mit
      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE project [<!ENTITY add-proguard-release SYSTEM "add-proguard-release.xml">
      ]> 
      ersetzten.
    6. Ebenso die Zeile
      <project name="WIFIosGeoP" default="help">
      
      mit Zeilen
       <projectname="WIFIosGeoP" default="help">
      &add-proguard-release;
      ersetzten.
    7. D:\android\workspace\WIFIonsafetyGeoPoints> ant release
    8. Jetzt nur noch eure Passwörter für store und alias eingeben und am Ende erscheint wieder ein "BUILD SUCCESS".
    9. Wieder ist die APP zufinden unter D:\android\workspace\WIFIonsafetyGeoPoints\bin\WIFIosGeoP-released.apk

Das ist jedenfals der Gut-Fall.
Vergesst nicht, dass der Name meiner APP durch eure ersetzt werden sollte und dass der Keystore bzw. Keyalias durchaus ander heißen können.
Die Pfade überprüfen sind tolle Fehlerfänger.
Mit externen Libraries habe ich heute auch lange gekämpft.

Meine App war vor dem Spaß hier 75kb groß und nun ist diese 68kb groß.
Das ist eine Ersparniss von fast 10%. Würde sich aber erst bei Apps mit MB lohnen.

Gott hat die Welt in 7 Tagen erschaffen.
Ich brauchte 9 Stunden für Obfuscation und so 2h für den Beitrag.
Und ihr werdet nun nicht mehr so viel Zeit verschwenden.

In diesem Sinne.
regards

    Keine Kommentare:

    Kommentar veröffentlichen