13

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

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

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

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

4

2 回答 2

17

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

根据reddit 上的这个答案Google 问题跟踪器上的这个问题,这是因为从 API 23 开始,平台可以在未压缩的情况下读取本机库而无需提取它们。

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

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

  • 无论如何,APK在下载之前被压缩,所以下载大小不会改变
  • 安装后,该库只有一份副本(在 APK 中未压缩)

当我刚刚对此进行测试时,与 minSdk 23 相比,安装后的大小实际上高于 22,这与他们所说的应该发生的情况相反。这是因为 APK 包含所有 ABI 的库。如果我只使用一个 ABI,那么 minSdk 23 会更小一些。因此,在您开始拆分 APK或使用App Bundle之前,您可能需要android:extractNativeLibs="true"AndroidManifest.xml.

于 2020-08-14T17:39:32.673 回答
1

阅读有关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.** { *; }
于 2020-06-18T05:05:57.057 回答