Android Gradle 插件中的“minifyEnabled”和“useProguard”有什么区别?

问题描述 投票:0回答:4

我看到 Android Plugin for Gradle 有一个

minifyEnabled
属性以及一个
useProguard
属性,如下所示:

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

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

android gradle android-gradle-plugin build.gradle proguard
4个回答
71
投票

引用自tools.android.com

内置收缩器

适用于 Gradle 的 Android 插件 2.0 版附带了一个实验性的 内置代码收缩器,可以用来代替 ProGuard。这 内置收缩机支持快速增量运行,旨在加快速度 迭代周期。可以使用以下代码启用它 片段:

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

内置的收缩器只能删除死代码,它不会混淆或优化。可以使用与以下相同的文件进行配置 ProGuard,但会忽略与混淆或相关的所有标志 优化。

与 ProGuard 不同,我们支持将内置收缩器与 Instant Run:根据项目的不同,可能会大幅减少 初始构建和安装时间。任何可访问的方法 代码更改后将显示为新添加到程序中并且 防止即时运行热插拔。


36
投票

你不再需要

useProguard true
了。

当您将

minifyEnabled
属性设置为 true 时,默认情况下启用 R8 代码压缩。

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


23
投票

我为我的发布版本构建类型设置了

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


8
投票

只需启用

minifyEnabled
即可对代码进行优化和混淆。 这是因为
useProguard true
是默认的,所以不需要显式设置它。

另请参阅: Android Studio 中的混淆

© www.soinside.com 2019 - 2024. All rights reserved.