前一阵,马斯克“狂吹”微信,赞其功能强大,中国人就像“住在微信里面一样”,是一个很好的 App。结果今天一早,微信就因功能太多上了热搜:
据了解,最初在 2011 年 1 月发布的微信 1.0,其安卓 APK 安装包的体积仅有 457KB,可谓是名副其实的“小而美”;而到了 11 年后的如今,微信 8.0.24 版本的安装包已经达到了 257MB——11 年来,微信安装包膨胀了 575 倍。
突然之间,觉得自己好像掌握了手机内存越来越大、空间却越来越小的答案……不过,膨胀了几百倍的微信到底加了些啥呢?
近日,B 站 UP 主“科技老男孩”就通过逆向工程,揭秘了这些年来微信 APK 安装包膨胀的 575 倍到底用来做什么了,即他所说的:“微信在这 11 年是怎么从小而美变成大而肥的。”
(图片来自 B 站 UP 主“科技老男孩”视频截图)
由于 575 倍这一数字来自微信 1.0 和微信 8.0.24 之间的差距,因此这位 UP 主逆向工程和对比的也正是这两个微信版本。
首先需要明确的是,APK 安装包本质上只是一种 zip 压缩包,这也就意味着安装好的 App 往往会比其 APK 文件要大得多。
以微信 8.0.24 为例,其 APK 安装包 257MB,但解压后大小为 617MB,占用空间 634MB,包含 12639 个文件,是解压前的 2.4 倍。与之相比,微信 1.0 解压后只有 737KB,占用空间 1.03MB,文件数也只有 199 个——也就是说,当初微信 1.0 仅用 199 个文件就实现了“聊天”这个核心功能。
随后,该 UP 主便分别查看这两个微信版本解压后的文件夹,对比其中差距所在。
(1)assets 文件夹
在微信 8.0.24 中,该文件夹大小 78.4MB,占用空间 80.1MB,包含 1137 个文件,主要装着微信的各类资源素材,如自带的 emoji 表情、不同页面下的字体、音频文件、图片资源、微信电话铃声等。
而在微信 1.0 中,可能因为当时微信用的都是系统自带的资源,所以并没有 assets 文件夹。
值得一提的是,在解析微信 8.0.24 的 assets 文件夹时,UP 主吐槽了两点:
编程最忌讳的就是拼音命名,因为这会使代码很难维护,而腾讯程序员却将“收款到账”的音频文件直接命名为“skdz”。
“收款到账”的音频放在 assets\sound 路径下,而同为音频文件的“微信电话铃声”却直接放在了 assets 路径下,可见“新版微信的开发非常混乱”。
(2)lib 文件夹
在微信 8.0.24 中,该文件夹大小为 337MB,占用了该微信版本空间的 54%,里面装的是各种第三方动态库,如解压文件所用到的 7-Zip 库,实时解码播放 ape、flac、mp3、ogg 音频文件用到的库,编解码视频用到的 ffmepg 库等等,一共有 157 个库。
据 UP 主分析,这些库的由来大多是因为“面向复制粘贴编程”:很多情况下,编程并不是从 0 开始硬写,而是缺少什么功能就去网上找实现这种功能的“轮子”再缝合进 App 里,这就导致了往 App 塞入的功能越多,其安装包体积也会因为各种动态库的加入变得越臃肿。
反观微信 1.0,其 lib 文件夹下只有 1 个动态库,大小也仅有 127KB,即可实现“聊天”这个最重要的功能。
(3)META-INF 文件夹
该文件夹用于存储开发者的数字签名,微信 8.0.24 中的大小为 2.1MB,微信 1.0 中则为 34.4KB。
(4)r/res 文件夹
在微信 8.0.24 中,r 文件夹大小 29.9MB,它在微信 1.0 中对应的是 res 文件夹,大小为 250KB,主要存放 App 的资源库,如各种图形化界面的框架素材、图标素材等。
(5)resdec 文件夹
不论在微信 1.0 还是在微信 8.0.24 中,该文件夹都是空的,因此不再赘言。
(6)其他文件
除此之外,在微信 8.0.24 的根目录下还有 17 个文件:配置文件 AndroidManifest.xml,记录 classes.dex 文件 MD5 值的 baseInfo.dat,记录文件之间对应关系的 resources.arsc,以及 14 个 classes.dex 文件,也就是 Java 经过源码编译后生成的 Java 字节码文件,即微信编译后的程序本体。
在微信 8.0.24 中,14 个 classes.dex 文件共占 161 MB,对应微信 1.0 中仅有 1 个,且仅占 256KB。
(7)源代码组成
分析完解压文件后,UP 主称还通过逆向工程查看了编译前的微信源代码,结果令其震惊。
先看微信 1.0 源代码所包含的内容,其组成源代码的基本单元如下:
再看微信 8.0.24 的源代码组成单元:
通过对比可轻易看出微信 8.0.24 中各种单元都增加了 500 倍以上,尤其是 string 字符串,从最初的 1845 个到新版中暴涨近 150 万个。UP 主对此调侃道:“可见新版微信中有 99.9% 的内容都是垃圾,真正实现聊天部分的代码可能只占 0.1%。”
在视频尾声,这名 UP 主总结道:“微信把自己当操作系统来做 App,什么打车、快递、外卖、游戏,不管你用不用得上都给你塞进去,然后淘宝、支付宝、美团等各种 App 又来占一遍你的手机空间,导致手机提升的性能和增加的内存都用来运行这些垃圾功能的代码,而用户丝毫没有选择权。”
“科技老男孩”的这则视频在 B 站引起大量讨论的同时,也登上了微博热搜,众多网友对他的解析发表了自己的看法。
有许多人认可 UP 主的结论:
“电脑一个浏览器,手机塞满 App。”
“微信占我十个多 G,手机已经快爆了。”
部分人指出,这名 UP 主的分析并不专业,且过于主观:
“作为一名 Android 开发,这个视频是篇爽文,但毫无技术价值,没几个正确的点。”
“虽然微信垃圾是事实,但你这个逆向明显说不通。”
“主观意识太强烈了。”
同时也有部分网友借此说出了一些理想化建议:
“如果可以自己下载模块化就好了,在基础聊天功能上,短视频和看点自己选择性下载。”
“希望软件都出个纯净版,不要整些花里胡哨、不需要的功能增加内存。”
还记得在去年的微信之夜上,微信创始人张小龙曾说:“微信一开始就是奔着小而美的产品去做的,现在也依然还是一款小而美的产品。”可当我们看着手机里即便经常清缓存也几乎稳居 App 内存占用第一名的微信,不免有些茫然。
最初,微信作为“方便快捷简便”的“轻聊天工具”走红,而如今,承载了支付、短视频、搜索、购物等多项功能的微信俨然已成长为一个超级 App。
除却微信,目前许多企业做 App 也是一副“我全都要”的态度,为了吸引并稳固更多流量,不管相不相关、好不好用,只要火的功能就都往里塞,一个个都想成为全能浏览器、超级 App。
但实际上对于很多用户来说,这些功能往往并不会被用到,App 体积的增加对他们而言也并不必要——这就引发了一个思考:一个又一个超级 App 的诞生,对消费者而言究竟是便利的狂欢还是福利的悲哀?
最后,可否分享你手机中的微信占据多少内存?你对微信又有什么建议或看法?
参考链接:
https://www.bilibili.com/video/BV1cB4y1b77n?spm_id_from=333.337.search-card.all.click
https://s.weibo.com/weibo?q=%E5%BE%AE%E4%BF%A1%E5%AE%89%E8%A3%85%E5%8C%8511%E5%B9%B4%E8%86%A8%E8%83%80575%E5%80%8D&Refer=realtime_weibo
— 推荐阅读 —