正确覆盖proguard选项

tik*_*tak 6 android proguard

我正在使用当前项目中的ProGuard,并决定尝试优化android配置(使用gradle):

proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
Run Code Online (Sandbox Code Playgroud)

我没有找到任何关于proguard和android版本执行的优化的明确文档,这些版本与它们兼容:

-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/* 
Run Code Online (Sandbox Code Playgroud)

如果app min sdk版本是11,它们是最新的吗?

所以我决定覆盖它试试proguard-rules.pro:

-optimizations **
-printconfiguration "result.pro"
Run Code Online (Sandbox Code Playgroud)

但最终的配置并不像我预期的那样.它包含所有组合的规则:

-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*,**
Run Code Online (Sandbox Code Playgroud)

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

Mik*_*ren 5

它花了我一些试验和错误但最终发现了.例如,要覆盖默认的ProGuard优化,除此之外应用所有内容code/simplification/arithmetic:

  1. -optimizations在ProGuard文件中添加一行,*用于表示所有内容.例如,以下行:

    -optimizations !code/simplification/arithmetic,*
    
    Run Code Online (Sandbox Code Playgroud)

    表示"启用除code/simplification/arithmetic" 之外的所有优化".官方网站上提供了可用优化列表,您可以使用它*来启用/禁用优化类(例如!field/*).

  2. 您必须确保在默认ProGuard文件之前加载ProGuard规则文件,方法是交换Gradle文件中的proguard-rules.pro和的顺序,getDefaultProguardFile('proguard-android.txt')以便proguard-rules.pro首先显示:

    buildTypes {
      release {
        minifyEnabled false
        proguardFiles 'proguard-rules.pro', getDefaultProguardFile('proguard-android.txt')
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)

输出应该看起来像这样:

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
Run Code Online (Sandbox Code Playgroud)