最近,我们将最小支持的 SDK 从 API 21 提高到了 24。
显然,这种变化导致我们的 APK 大小从 65mb 增加到 103mb。从 Android studio 中的 APK 分析可以看出,基本上都是 .so 文件的大小翻了一番。
但为什么会这样呢?gradle 属性没有改变,只有 min sdk。
关于如何再次减小 APK 大小的任何想法?
最近,我们将最小支持的 SDK 从 API 21 提高到了 24。
显然,这种变化导致我们的 APK 大小从 65mb 增加到 103mb。从 Android studio 中的 APK 分析可以看出,基本上都是 .so 文件的大小翻了一番。
但为什么会这样呢?gradle 属性没有改变,只有 min sdk。
关于如何再次减小 APK 大小的任何想法?
关于如何再次减小 APK 大小的任何想法?
根据reddit 上的这个答案和Google 问题跟踪器上的这个问题,这是因为从 API 23 开始,平台可以在未压缩的情况下读取本机库而无需提取它们。
如果您的 minSdk 为 22 或更低,他们将无法使用它,因为在较旧的设备上会有这些库的两个副本(未提取并从 APK 中提取)。
如果您声明 minSdk 23 或更高版本,使用未压缩的本机库构建 APK 应该可以节省设备空间,因为:
当我刚刚对此进行测试时,与 minSdk 23 相比,安装后的大小实际上高于 22,这与他们所说的应该发生的情况相反。这是因为 APK 包含所有 ABI 的库。如果我只使用一个 ABI,那么 minSdk 23 会更小一些。因此,在您开始拆分 APK或使用App Bundle之前,您可能需要android:extractNativeLibs="true"
在AndroidManifest.xml
.
阅读有关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.** { *; }