我看到 Android Plugin for Gradle 有一个
minifyEnabled
属性以及一个 useProguard
属性,如下所示:
android {
buildTypes {
debug {
minifyEnabled true
useProguard false
}
release {
minifyEnabled true
useProguard true
}
}
}
这两个属性有什么区别?或者更确切地说,每个的含义是什么?
内置收缩器
适用于 Gradle 的 Android 插件 2.0 版附带了一个实验性的 内置代码收缩器,可以用来代替 ProGuard。这 内置收缩机支持快速增量运行,旨在加快速度 迭代周期。可以使用以下代码启用它 片段:
android { buildTypes { debug { minifyEnabled true useProguard false proguardFiles getDefaultProguardFile('proguard-android.txt') } } }
内置的收缩器只能删除死代码,它不会混淆或优化。可以使用与以下相同的文件进行配置 ProGuard,但会忽略与混淆或相关的所有标志 优化。
与 ProGuard 不同,我们支持将内置收缩器与 Instant Run:根据项目的不同,可能会大幅减少 初始构建和安装时间。任何可访问的方法 代码更改后将显示为新添加到程序中并且 防止即时运行热插拔。
你不再需要
useProguard true
了。
当您将
minifyEnabled
属性设置为 true 时,默认情况下启用 R8 代码压缩。
当您使用 Android Gradle 插件3.4.0 或更高版本构建项目时,该插件不再使用 ProGuard 来执行编译时代码优化。相反,该插件与 R8 编译器一起根据官方文档处理任务。
我为我的发布版本构建类型设置了
minifyEnabled true
,它删除了整个枚举,我猜它认为是未使用的代码。这导致我的应用程序因 NoSuchFieldException
崩溃。我花了 4 个小时才找到这次崩溃的原因。 0/10 不能推荐 minifyEnabled。