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

Why is minifyEnabled is false in release builds by default?

在 build.gradle (app) 文件中我们默认有这个,

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
}

根据https://developer.android.com/studio/build/shrink-code,

minifyEnabled true 使代码更安全(使其难以逆向工程)并缩小我们用于发布应用程序的发布版本的大小。

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

我正在寻找的是,在运行时使用 minifyEnabled true 会导致哪些缺点(例如性能影响)。我不担心发布版本的构建时间。

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

通过在你的发布版本中添加 minifyEnabled true 你可以混淆代码,但它在发布版本中默认设置为 false 因为如果设置为 true 它需要编写混淆规则来告诉编译器哪个 类在混淆代码时将被忽略。如果 minifyEnabled 默认设置为 true 而开发者忘记添加 proguard 规则,可能会导致运行时崩溃。

但是,将 minifyEnabled 设置为 true 并将 shrinkResources 设置为 true 可以减小您的 apk 大小。

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

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

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

您应该检查您的 release 构建在多个 devices/emulators 上的不同 Android 版本,以了解它可能崩溃的地方。 release 构建中的调试很困难,混淆会变成一场噩梦。

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