之前和群友在讨论手机储存空间问题,突然想到,安卓的安装机制有点奇怪,它会把完整安装包存一份,安装包里面的资源(.so 等)提取出来存一份,编译优化后的代码又存一份。这就使得安装完成占用空间翻了很多倍。
比如我刚试了一下,我自己写的一个 compose 测试程序,安装包 2mb 不到,安装完成占用空间已经接近 30mb 了。
有点疑惑谷歌是出于什么考虑才这样做的呢?
为何不直接解压安装包内所需资源后直接移除完整安装包呢?可能是安卓底层实现不适宜这样做?对这方面不太懂,所以比较疑惑。
甚至群里大佬还说了一个极端情况:
还有个问题是针对游戏的, 国内没什么好的分发平台, 游戏资源都直接打包到 apk , 然后有的游戏还要从 apk 里面复制到 android/obb 里面。
说到分发问题,play 确实可以打包 aab ,但是这样能解决这个问题吗?
1
AoEiuV020CN 2022-03-30 09:17:50 +08:00
so 这个已经改了,现在 minSdk>26 的话默认打的 apk 安装后就不会解压一份多余的 so ,
只能说以前考虑的是减少 apk 体积,现在可以分包处理所以优先考虑减少手机空间占用, |
2
AoEiuV020CN 2022-03-30 09:19:20 +08:00
@AoEiuV020CN #1 不是>26 ,应该是>23,
|
3
AoEiuV020CN 2022-03-30 09:23:17 +08:00
查了下,是 minSdk >= 23 会默认不压缩 so ,这样就可以安装后不解压出来,直接使用 apk 内部的 so ,
https://developer.android.com/reference/tools/gradle-api/7.1/com/android/build/api/dsl/JniLibsPackagingOptions#uselegacypackaging |
4
equationl OP @AoEiuV020CN 这样啊。那还是很奇怪,为啥一个 2m 的安装包,安装后会占用 30m ,是又加了什么东西嘛
|