在适用于Gradle的Android插件中,“minifyEnabled”和“useProfuard”之间有什么区别?

ac1kyiln  于 2022-11-14  发布在  Android
关注(0)|答案(4)|浏览(201)

我看到Android Plugin for Gradle有一个minifyEnabled属性和一个useProguard属性,具体如下:

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

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

gk7wooem

gk7wooem1#

引用自tools.android.com

内置收缩器

Android Plugin for Gradle 2.0版附带了一个实验性的内置代码压缩器,可用于替代ProGuard。内置压缩器支持快速增量运行,旨在加快迭代周期。可使用以下代码片段启用:

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

内建的压缩程式只能移除失效的程式码,它不会进行混淆或最佳化。您可以使用与ProGuard相同的档案来设定它,但它会忽略所有与混淆或最佳化相关的旗标。

与ProGuard不同,我们支持将内置收缩器与Instant Run一起使用:根据项目的不同,它可以显著减少初始构建和安装时间。2任何在代码更改后可访问的方法都将显示为新添加到程序中,并阻止即时运行热插拔。

niknxzdl

niknxzdl2#

你不再需要useProguard true了。
当您将minifyEnabled属性设定为true时,预设会启用R8的程式码压缩。
当您使用Android Gradle插件3.4.0或更高版本构建项目时,该插件不再使用ProGuard执行编译时代码优化。相反,该插件与R8编译器协同工作,根据official document处理任务。
如果要使用ProGuard而不是R8,请在www.example.com文件中添加此行gradle.properties

android.enableR8=false
mqkwyuun

mqkwyuun3#

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

5cg8jx4n

5cg8jx4n4#

只要启用minifyEnabled,代码就会被优化和混淆。这是因为useProguard true是默认的,所以不需要显式设置它。
另请参阅:Obfuscation in Android Studio

相关问题