V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
realfex
V2EX  ›  Android

安卓微信的一个大困惑,求大佬们解答

  •  
  •   realfex · 2019-06-26 18:25:00 +08:00 · 10311 次点击
    这是一个创建于 1980 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近换了个新安卓手机,发现一个现象

    微信安装包 90M,安装完成后,在应用程序管理里看到微信的占用空间是 230M

    其实为什么 90M 能安装出 230M 我也不是很明白,难道这里面有多层压缩?或者安装过程中创建了或者拷贝了很多有内容的文件?

    当然还有更疑惑的

    我不登录的情况下,占用一直是 230M。但是当我随便登录一个账号,哪怕是刚注册的账号之后,应用程序管理里微信的占用瞬间到了 580M。而且在手机的文件管理里确实是可以看到总存储空间是少了 300 多 M 的。

    在短短的不超过 3 秒时间里,体积增加了 300 多 M,显然不是联网下载的。

    我第一反应是去找这些文件,手机文件管理里一直没找到多出来的这 300M 的文件,后来网上查了才知道,应该是在根目录的 data 文件夹里(手机没 root 是看不到的)

    那么问题来了:

    1.微信是如何做到 230M 的体积登录后瞬间变成 580M 的,这里面做了什么,一直复制文件?解压文件?写文件?

    2.这些文件是用来干嘛的,为什么需要这么大?

    小弟对此真的很好奇,跪求安卓大佬们解答。。

    (而且微信 app 里显示的微信占用空间只有 120M,实在是有点混淆视听。)

    17 条回复    2019-06-28 10:34:10 +08:00
    yangyn
        1
    yangyn  
       2019-06-26 18:47:59 +08:00
    同疑惑,坐等大佬解答
    kaedea
        2
    kaedea  
       2019-06-26 18:49:43 +08:00 via Android   ❤️ 1
    AOT
    bbq777aass
        3
    bbq777aass  
       2019-06-26 19:04:07 +08:00 via Android
    好问题,同坐等专家
    yukiww233
        4
    yukiww233  
       2019-06-26 19:06:38 +08:00   ❤️ 3
    第一次安装会解压出所有 so 和生成 oat 文件
    第一次打开 vx 会解压出插件化的组件和各种乱七八糟的黑科技
    realfex
        5
    realfex  
    OP
       2019-06-26 19:09:09 +08:00
    @yukiww233 也就是说那 580M 其实都是 90M 的安装包 一层层解压或者安装过程中生成出来的?
    yukiww233
        6
    yukiww233  
       2019-06-26 19:13:22 +08:00
    @realfex #5 大部分是的。第一次打开大厂应用基本都会下载大量的 hotfix 和插件 /资源(目测几十 M 有的),至于是不是立刻 apply 就不知道了
    lizhuoli
        7
    lizhuoli  
       2019-06-26 19:14:52 +08:00 via iPhone
    Android 是可以动态下发代码执行的,现在所谓的 5M apk,第一次启动后就开始下载插件,最后变成 200MB 很常见

    iOS 从系统级别断掉了这个可能性,非系统的 entitlements 的 App,在 Data 段不允许执行代码,JIT 什么的都别想啦
    zzsakurazz
        8
    zzsakurazz  
       2019-06-26 19:15:27 +08:00
    可以安装后监控下流量监控
    menyakun
        9
    menyakun  
       2019-06-26 19:29:55 +08:00   ❤️ 2
    1. 90M -> 230M: apk 是压缩格式,就是纯粹的解压。也就是 /data/app/com.tencent.mm/所占的空间
    2. 230M -> 580M: AOT 后会生成一个文件,在 /data/dalvik-cache/arm/,初次之外大概还有微信自己初始化一些 sqlite 之类的文件预分配的大小
    pursuer
        10
    pursuer  
       2019-06-26 20:30:26 +08:00
    微信有一个叫 tinker 的东西,热修复用的,安装后会解压到 data 里,然后优化成 oat 文件,这个 oat 之前我看到的时候有 150mb 左右吧。
    antileech
        11
    antileech  
       2019-06-26 21:49:54 +08:00
    230M 本身包含了 90M 的 apk,剩下的 140M 才是解压的 so 和生成的 oat 文件,90M->140M,没什么毛病啊
    janus77
        12
    janus77  
       2019-06-26 23:20:20 +08:00
    换了安卓手机?难道你以前用的 ios 手机不是几个 G 的数据? ios 是什么原因,安卓就是什么原因。
    lucaslai
        13
    lucaslai  
       2019-06-27 08:55:36 +08:00
    和 qq 一样安装包小用一用的就越长越大,不过 qq 会有一个“正在更新数据”的进度条,而微信没有。
    Minson
        14
    Minson  
       2019-06-27 09:36:12 +08:00
    安装软件就是解压的过程啊,安装好之后还要初始化,各种配置文件,数据库什么的。越用越大
    MozzieW
        15
    MozzieW  
       2019-06-27 14:43:41 +08:00
    启动后不知道, 安装后变大这个是 Androi 自己的问题. 安装后文件放置 @menyakun 9 楼说的地方 /data/app/com.tencent.mm . 但安装并不是简单的解压. 里面主要有三块内容, 原本的安装包, 根据机型挤压的 SO 库, 还有为了加快执行速度二生成的 oat 文件(这个最大, 我看到的是 207M). 这个应该是 5.0 换了 VM 后才有的, 怀疑和系统版本和机型有关(本身就是对不同 CPU 的优化文件?)
    测试机卸载微信重装测的. 数据是: 安装包微信 7.04 版本 96.35M, 安装后 SO 文件 j 夹 74.72M(很多文件(), base.apkPK 显示 96.60M(应该是大小算法不一样), OAT 下面的 base.odex 207.56M, 最后应用显示一共用了 379M
    MozzieW
        16
    MozzieW  
       2019-06-27 14:47:19 +08:00
    另外一个, 微信 App 里面显示的, 是聊天数据和缓存(可以清理的), 不包括安装包本身和系统优化的空间. 说实话, 系统优化的东西不能让应用开发者承担责任吧
    realfex
        17
    realfex  
    OP
       2019-06-28 10:34:10 +08:00
    谢谢各位大佬解惑!基本明白了!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1238 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 23:09 · PVG 07:09 · LAX 15:09 · JFK 18:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.