android - 正确覆盖 proguard 选项

标签 android proguard

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

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 **

最佳答案

我花了一些时间试错,但最终找到了答案。例如,要覆盖默认的 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') 在 Gradle 文件中,以便 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

关于android - 正确覆盖 proguard 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29643847/

相关文章:

c# - 保存我的 Activity xamarin.android 的状态

android - 无法在我的自定义 Android 应用程序中启动 DayDream 服务

java - 当我在 android 6.0 上运行时,我在微调器上收到错误。但相同的代码适用于 Android 版本 7、8、9

android - 适用于 Android Amazon AppStore 的应用内支付

android - 未解析的类名 proguard-rules Android Studio 4.0

Android 应用程序在 Debug模式下工作,但在安装时不工作

java - 检测到不一致。无效的项目位置 0(偏移量 :-1). .. RecyclerView 在删除第一个项目时崩溃

Android,Log会降低应用程序速度吗?

java - Android:Java:Proguard:如何:验证我的 jar(不同的 jar 项目)/apk 是否已成功处理? (我正在考虑对其进行逆向工程)

android - 无法保护代码免受 Eclipse 中的逆向工程