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

2019-06-26 18:25:00 +08:00
 realfex

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

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

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

当然还有更疑惑的

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

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

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

那么问题来了:

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

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

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

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

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

iOS 从系统级别断掉了这个可能性,非系统的 entitlements 的 App,在 Data 段不允许执行代码,JIT 什么的都别想啦
zzsakurazz
2019-06-26 19:15:27 +08:00
可以安装后监控下流量监控
menyakun
2019-06-26 19:29:55 +08:00
1. 90M -> 230M: apk 是压缩格式,就是纯粹的解压。也就是 /data/app/com.tencent.mm/所占的空间
2. 230M -> 580M: AOT 后会生成一个文件,在 /data/dalvik-cache/arm/,初次之外大概还有微信自己初始化一些 sqlite 之类的文件预分配的大小
pursuer
2019-06-26 20:30:26 +08:00
微信有一个叫 tinker 的东西,热修复用的,安装后会解压到 data 里,然后优化成 oat 文件,这个 oat 之前我看到的时候有 150mb 左右吧。
antileech
2019-06-26 21:49:54 +08:00
230M 本身包含了 90M 的 apk,剩下的 140M 才是解压的 so 和生成的 oat 文件,90M->140M,没什么毛病啊
janus77
2019-06-26 23:20:20 +08:00
换了安卓手机?难道你以前用的 ios 手机不是几个 G 的数据? ios 是什么原因,安卓就是什么原因。
lucaslai
2019-06-27 08:55:36 +08:00
和 qq 一样安装包小用一用的就越长越大,不过 qq 会有一个“正在更新数据”的进度条,而微信没有。
Minson
2019-06-27 09:36:12 +08:00
安装软件就是解压的过程啊,安装好之后还要初始化,各种配置文件,数据库什么的。越用越大
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
2019-06-27 14:47:19 +08:00
另外一个, 微信 App 里面显示的, 是聊天数据和缓存(可以清理的), 不包括安装包本身和系统优化的空间. 说实话, 系统优化的东西不能让应用开发者承担责任吧
realfex
2019-06-28 10:34:10 +08:00
谢谢各位大佬解惑!基本明白了!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/577753

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX