【问题标题】:What's the difference between "minifyEnabled" and "useProguard" in the Android Plugin for Gradle?Android Plugin for Gradle 中的“minifyEnabled”和“useProguard”有什么区别?
【发布时间】:2016-08-28 16:43:01
【问题描述】:

我看到 Android Plugin for Gradle 有一个 minifyEnabled 属性以及一个 useProguard 属性,如下所示:

android {
    buildTypes {
        debug {
            minifyEnabled true
            useProguard false
        }
        release {
            minifyEnabled true
            useProguard true
        }
    }
}

这两个属性有什么区别?或者,更确切地说,每个的含义是什么?

【问题讨论】:

  • 该文档(在撰写此评论时)不包含任何关于 useProguard 属性 @cricket_007 的内容。除非 useProguard 是最新版本的 Android Plugin for Gradle 中 shrinkResources 属性的重命名?
  • "资源收缩只能与代码收缩结合使用(例如 ProGuard)"

标签: android gradle android-gradle-plugin build.gradle android-proguard


【解决方案1】:

引用tools.android.com:

内置收缩器

Android Plugin for Gradle 2.0 版附带一个实验性的 内置代码收缩器,可以代替 ProGuard 使用。这 内置收缩器支持快速增量运行,旨在加快 向上迭代周期。可以使用以下代码启用它 sn-p:

android {
    buildTypes {
        debug {
            minifyEnabled true
            useProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt')
        }
    }
}

内置的shrinker只能去除死代码,不会混淆或优化。它可以使用相同的文件进行配置 ProGuard,但会忽略所有与混淆或 优化。

与 ProGuard 不同,我们支持将内置收缩器与 Instant Run:视项目而定,可能会显着降低 初始构建和安装时间。任何可以访问的方法 代码更改后将显示为新添加到程序中,并且 防止 Instant Run 热插拔。

【讨论】:

【解决方案2】:

你不再需要useProguard true了。

当您将minifyEnabled 属性设置为 true 时,默认情况下会启用使用 R8 的代码收缩。

当您使用 Android Gradle 插件 3.4.0 或更高版本 构建项目时,该插件不再使用 ProGuard 来执行编译时代码优化。相反,该插件与 R8 编译器一起使用,以根据 official document 处理任务。

如果您想使用 ProGuard 而不是 R8。在 gradle.properties 文件中添加这一行

 android.enableR8=false

【讨论】:

  • 试过这个,但不知道它是否有效。 mapping.txt 文件也没有生成。
【解决方案3】:

我为我的版本 buildType 设置了minifyEnabled true,它删除了一个我猜它认为是未使用的代码的整个枚举。由于NoSuchFieldException,这使我的应用程序崩溃。我花了 4 个小时才找到这次崩溃的原因。 0/10 不能推荐minifyEnabled。

【讨论】:

    【解决方案4】:

    只需启用minifyEnabled 即可优化和混淆代码。 这是因为useProguard true 是默认值,因此无需显式设置。

    另请参阅: Obfuscation in Android Studio

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-16
      • 2014-10-10
      • 1970-01-01
      • 2017-06-21
      相关资源
      最近更新 更多