V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
equationl
V2EX  ›  问与答

安卓的安装机制是出于什么原因做成现在这种的呢?

  •  
  •   equationl · 2022-03-29 23:38:42 +08:00 via Android · 1199 次点击
    这是一个创建于 752 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前和群友在讨论手机储存空间问题,突然想到,安卓的安装机制有点奇怪,它会把完整安装包存一份,安装包里面的资源(.so 等)提取出来存一份,编译优化后的代码又存一份。这就使得安装完成占用空间翻了很多倍。

    比如我刚试了一下,我自己写的一个 compose 测试程序,安装包 2mb 不到,安装完成占用空间已经接近 30mb 了。

    有点疑惑谷歌是出于什么考虑才这样做的呢?

    为何不直接解压安装包内所需资源后直接移除完整安装包呢?可能是安卓底层实现不适宜这样做?对这方面不太懂,所以比较疑惑。

    甚至群里大佬还说了一个极端情况:

    还有个问题是针对游戏的, 国内没什么好的分发平台, 游戏资源都直接打包到 apk , 然后有的游戏还要从 apk 里面复制到 android/obb 里面。

    说到分发问题,play 确实可以打包 aab ,但是这样能解决这个问题吗?

    4 条回复    2022-03-30 12:44:01 +08:00
    AoEiuV020CN
        1
    AoEiuV020CN  
       2022-03-30 09:17:50 +08:00
    so 这个已经改了,现在 minSdk>26 的话默认打的 apk 安装后就不会解压一份多余的 so ,
    只能说以前考虑的是减少 apk 体积,现在可以分包处理所以优先考虑减少手机空间占用,
    AoEiuV020CN
        2
    AoEiuV020CN  
       2022-03-30 09:19:20 +08:00
    @AoEiuV020CN #1 不是>26 ,应该是>23,
    AoEiuV020CN
        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
    equationl
        4
    equationl  
    OP
       2022-03-30 12:44:01 +08:00 via Android
    @AoEiuV020CN 这样啊。那还是很奇怪,为啥一个 2m 的安装包,安装后会占用 30m ,是又加了什么东西嘛
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1215 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 17:58 · PVG 01:58 · LAX 10:58 · JFK 13:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.