将最小SDK从21提高到24后,APK大小增加了35MB。

24

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

显然,这个改变导致我们的APK大小从65MB增加到了103MB。从Android Studio中对APK的分析结果来看,所有的.so文件基本上都翻了一倍。

但是为什么会出现这种情况呢?没有更改gradle属性,只是更改了最小SDK。

您有什么想法可以减小APK大小吗?

2个回答

37
但为什么会这样呢?没有更改gradle属性,只是更改了最小的sdk版本。
根据Reddit上的这个答案Google问题跟踪器上的这个问题,因为从API 23开始,平台可以在未解压缩的情况下读取本地库,所以他们更改了extractNativeLibs清单属性的默认值。
如果声明minSdk为23或更高版本,则使用未压缩的本地库构建APK可以节省设备上的空间,因为:
  • 无论如何,APK都会在下载前进行压缩,因此下载大小不会改变
  • 安装后,只有一个库的副本(未压缩在APK内)
当我测试时,与22相比,minSdk 23的安装后大小实际上更大,与他们说的相反。那是因为APK包含所有ABI的库。如果我只使用一个ABI,则minSdk 23的大小会稍小一些。
有什么想法可以再次减小APK的大小吗?
因此,在开始拆分APK或使用App Bundle之前(这非常简单,甚至可以进一步减小大小),您可能希望在AndroidManifest.xml中设置android:extractNativeLibs="true"以获得旧行为。

嘿,非常感谢您对此做出回应。 实际上,您的解决方案几乎就是我最终采用的方式——我们将提取本地库设置为 true 以进行调试构建,否则设置为 false。这样,调试 APK 的大小保持不变(以解决某些工具上传限制问题),而发布 APK 仍然可以利用 Play 商店的压缩功能,从而使最终用户下载更小。 - im_not_josh

-2

阅读有关减小应用程序大小的官方指南。 为了克服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文件是问题所在。 - im_not_josh

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