【问题标题】:APK size increased 35mb when bumping min SDK from 21 to 24将 min SDK 从 21 增加到 24 时,APK 大小增加了 35mb
【发布时间】:2020-06-17 23:44:32
【问题描述】:

最近我们将最小支持的 SDK 从 API 21 提高到了 24。

显然,此更改导致我们的 APK 大小从 65mb 增加到 103mb。 从 Android studio 中的 APK 分析可以看出,基本上都是 .so 文件的大小翻了一番。

但是为什么会这样呢? gradle 属性没有改变,只有 min sdk。

关于如何再次减小 APK 大小的任何想法?

【问题讨论】:

    标签: android apk android-6.0-marshmallow android-native-library android-min-sdk


    【解决方案1】:

    关于如何再次减小 APK 大小的任何想法?

    根据this answer on redditthis issue on Google issue tracker,这是因为从 API 23 开始,如果未压缩,平台可以读取本地库而无需提取它们。

    如果您的 minSdk 为 22 或更低,他们将无法使用它,因为在旧设备上会有这些库的两个副本(未提取并从 APK 中提取)。

    如果您声明 minSdk 23 或更高版本,使用未压缩的本机库构建 APK 应该可以节省设备空间,因为:

    • APK 在下载前已被压缩,因此下载大小不会改变
    • 安装后,该库只有一份副本(在 APK 中未压缩)

    当我刚刚对此进行测试时,与 minSdk 23 相比,安装后的大小实际上比 22 大,这与他们所说的应该发生的情况相反。那是because the APK includes libraries for all ABIs。如果我只使用一个 ABI,那么 minSdk 23 会小一些。所以在您开始 splitting the APK 或使用 App Bundle 之前,您可能需要在 AndroidManifest.xml 中设置 android:extractNativeLibs="true"

    【讨论】:

    • 嘿,非常感谢您对此添加回复。您的解决方案实际上几乎是我最终采用的解决方案 - 我们将提取本机库设置为 true 用于调试构建,否则设置为 false。这样,调试 apk 保持其原始大小(以解决某些工具的上传限制),并且发布 apk 仍然利用 Play 商店压缩,因此最终用户下载量较小。
    【解决方案2】:

    阅读有关Reduce your app size 的官方指南。 要克服大尺寸 apk 的问题,您可以使用 ProGuard 规则。

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

    Proguard 通过删除未使用的代码并使用语义晦涩的名称重命名类、字段和方法来混淆您的代码,从而使代码库更小。结果是一个较小的 .apk 文件。

    打开proguard-rules.pro。添加规则

    演示

    -keep class packageName.** { *; }
    -keepclassmembers class packageName.** { *; }
    

    【讨论】:

    • 感谢您的回复,我们已经提供并设置了所有好东西。 APK 分析清楚地表明 .so 文件是问题所在。
    猜你喜欢
    • 1970-01-01
    • 2013-02-16
    • 2021-12-29
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    • 2014-01-27
    • 2023-03-17
    • 1970-01-01
    相关资源
    最近更新 更多