为什么在发布版本中默认情况下minifyEnabled为false?

13
在 build.gradle(app)文件中,默认情况下,我们有以下内容,
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
}

根据https://developer.android.com/studio/build/shrink-codeminifyEnabled true 可以使代码更安全(难以逆向工程),并在发布版本中缩小大小。我们用于发布应用程序。

我知道使用 minifyEnabled true会使编译时间变长,但通常调试构建用于开发和测试,无论如何都不受影响。

我想知道的是,使用 minifyEnabled true 在运行时会有什么缺点(例如对性能的影响)。我不担心发布构建的构建时间。

Google Play控制台也建议我们启用它,因此我想知道为什么默认情况下禁用 minifyEnabled


  1. 不,这并不会使它更加“安全”- 它只是让检查变得更加繁琐;
  2. 这确实需要更长时间,因此这是一个立即的缺点;
  3. 这只是一个默认设置,“为什么”要么是历史上[如邮件列表]丢失的,要么是某个人分配的偏好;
  4. 请参阅相关的shrinkResources文档和/或提出一个明确关注此类问题的新问题。
- user2864740
@user2864740 谢谢您的回复。那么您是在暗示启用它没有任何副作用吗?我还有点困惑。我实际上担心运行时性能。 - Amila Abeygunasekara
从之前的评论得出这样一个尴尬的结论。 - user2864740
1
@user2864740 这可能有点晚了,但是启用minifyEnabled会使应用程序构建时间更长。在低端到中端PC上非常明显。 - yuroyami
2个回答

9
在你的发布构建中添加minifyEnabled true可以混淆代码,但在发布构建中,默认情况下设置为false,因为如果设置为true,则需要编写proguard规则告诉编译器在混淆代码时要忽略哪些类。如果默认情况下将minifyEnabled设置为true而开发人员忘记添加proguard规则,则可能导致运行时崩溃。
然而,将minifyEnabled设置为true并将shrinkResources设置为true可以减小您的apk大小。

2

正如NIKHIL AGGARWAL所说,将minifyEnabled设置为true可能会导致运行时崩溃。

您应该研究每个使用的库,以便将它们的ProGuard规则包含到您的项目中。此外,有时在Gradle或库升级后,您应该再次检查ProGuard规则,并相应地更新它们到您的项目中。

您应该将网络模型的数据类添加到ProGuard中。

您应该在不同Android版本的几个设备/模拟器上检查您的release构建,以了解它可能在哪里崩溃。在release构建中进行调试很困难,而且混淆使其变成噩梦。

然而,当您设置minifyEnabled = true并避免崩溃后,您将减小apk大小并阻止破解尝试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接