2015-04-15 30 views
6

ich mit ProGuard in meinem aktuellen Projekt bin zu spielen und entschied optimierte Android-config (mit gradle), um zu versuchen:korrekt proguard Optionen außer Kraft setzen

proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 

ich keine klare Dokumentation über Optimierungen von proguard ausgeführt fanden und android-Versionen, die mit ihnen kompatibel sind:

-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/* 

sind sie up-to-date, wenn App min sdk Version 11 ist?

Also habe ich beschlossen, es zu überschreiben es in proguard-rules.pro einen Versuch zu geben:

-optimizations ** 
-printconfiguration "result.pro" 

Aber endgültige Konfiguration ist nicht, wie ich erwartet hatte. Es enthält alle Regeln kombiniert:

-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*,** 

Also wie kann Option in ProGuard korrekt überschrieben werden? Oder kann diese Zeile gleich -optimizations ** sein?

Antwort

4

Es dauerte ein wenig Versuch und Irrtum, aber schließlich herausgefunden. So überschreiben die Standard ProGuard Optimierungen, zum Beispiel, gelten aber alles code/simplification/arithmetic dann:

  1. hinzufügen -optimizations Zeile in ProGuard-Datei und verwenden *alle darzustellen. Zum Beispiel kann die folgende Zeile ein:

    -optimizations !code/simplification/arithmetic,* 
    

    bedeutet „ermöglichen alle Optimierungen außer code/simplification/arithmetic“. Die Liste der verfügbaren Optimierungen ist in the official website verfügbar, und Sie können * verwenden, um Optimierungsklassen zu aktivieren/deaktivieren (z. B. !field/*).

  2. Sie müssen sicherstellen, dass Ihre ProGuard Regeln Datei, bevor der Standard-ProGuard-Datei geladen wird, indem die Reihenfolge der proguard-rules.pro und getDefaultProguardFile('proguard-android.txt') in der Gradle Datei so ändern, dass proguard-rules.pro erscheint zuerst:

    buildTypes { 
        release { 
        minifyEnabled false 
        proguardFiles 'proguard-rules.pro', getDefaultProguardFile('proguard-android.txt') 
        } 
    } 
    

Die Ausgabe sollte jetzt ungefähr so ​​aussehen:

Optimizing... 
    Number of finalized classes:     68 
    Number of unboxed enum classes:    1 
    Number of vertically merged classes:   0 
    Number of horizontally merged classes:  3 
    Number of removed write-only fields:   0 (disabled) 
    Number of privatized fields:     58 
    Number of inlined constant fields:   375 
    Number of privatized methods:    13 
    Number of staticized methods:    37 
    Number of finalized methods:     210 
    Number of removed method parameters:   290 
    Number of inlined constant parameters:  236 
    Number of inlined constant return values: 239 
    Number of inlined short method calls:  35 
    Number of inlined unique method calls:  114 
    Number of inlined tail recursion calls:  0 
    Number of merged code blocks:    4 
    Number of variable peephole optimizations: 723 
    Number of arithmetic peephole optimizations: 10 
    Number of cast peephole optimizations:  0 
    Number of field peephole optimizations:  0 
    Number of branch peephole optimizations:  42 
    Number of string peephole optimizations:  35 
    Number of simplified instructions:   369 
    Number of removed instructions:    5019 
    Number of removed local variables:   154 
    Number of removed exception blocks:   0 
    Number of optimized local variable frames: 201 
Verwandte Themen