2015-04-15 58 views
6

我打使用ProGuard在我当前的项目,并决定尝试优化的Android配置(与gradle这个):正确覆盖proguard的选项

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

我没有找到有关的ProGuard进行优化,任何明确的文件和Android版本与它们兼容:

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

它们是最新的,如果应用程序最小sdk版本是11?

所以我决定重写它给它一个尝试proguard-rules.pro

-optimizations ** 
-printconfiguration "result.pro" 

但最终配置并不如我所料。它包含所有规则加在一起:

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

那么如何在ProGuard中正确覆盖选项?或者可能是这条线等于-optimizations **

回答

4

这花了我一些尝试和错误,但最终发现了。要覆盖默认ProGuard的优化,例如,适用于一切,但code/simplification/arithmetic则:

  1. 一个-optimizations行添加到您的ProGuard文件,并使用*代表所有。例如,下面的行:

    -optimizations !code/simplification/arithmetic,* 
    

    是指 “使所有优化除了code/simplification/arithmetic”。可用优化列表可在the official website中找到,您可以使用*来启用/禁用优化类(例如!field/*)。

  2. 你必须在摇篮文件交换的proguard-rules.progetDefaultProguardFile('proguard-android.txt')的顺序,以确保您的ProGuard规则文件是默认的ProGuard文件之前加载,这样proguard-rules.pro首次出现:

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

输出应该看起来像这样:

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