动机
往手机里装了个 30-40 GB 的游戏后,变成存储空间敏感型性格。那时就留意到MIUI内置、但可以被更新的小米浏览器应用(com.android.browser)的存储空间占用,以浏览器的标准评估,占得太多了。这几年间应用信息-存储占用那,“应用大小”曾有段时间维持在1GB左右(不含“用户数据”),实在是太离谱了。目前20.29版本比以前变小了一点,但和Chrome, Edge, Firefox相比,还是离谱。
我也是拧巴,自动更新不关、“卸载更新”不卸,然后对空间浪费又难受。
应用大小
| 应用 | 版本 | 应用大小 |
| 小米浏览器com.android.browser | 20.29.1031010 | 875MB |
| Chrome com.android.chrome | 154.0.8037.57 | 260MB |
| Edge Canary com.microsoft.emmx.canary | 139.0.3358.0 | 462MB |
| Firefox org.mozilla.firefox | 68.12.0 | 116MB |
在安装后未使用的场景下,小米浏览器已经是Chrome的3.4倍。轻度使用Chrome,产生的网页缓存都不一定大于两者的差值615MB。由此可见以浏览器的视角来评判小米浏览器,空间占用上是不合格的,占用了大量原本可用于存放网页缓存的空间。
apk包
apk大小247MB。
按zip格式查看内容物,577.1MB。
247MB + 577.1MB = 824.1MB。接近875MB。视为系统把apk的内部文件全部解压后并保留apk本体。
apk内部分布
| 205.5MB | lib/arm64-v8a | |
| 150.5MB | libhyper_chromium.so | |
| 54.9MB | 其余62个动态库so文件 | |
| 123.5MB | lib/armeabi-v7a | |
| 91.0MB | libhyper_chromium.so | |
| 32.5MB | 其余61个动态库so文件 | |
| 186.7MB | 33个classes*.dex文件 | |
| 38.3MB | res/ | UI图片素材 |
| 16.6MB | resources.arsc | |
| 6.2MB | 其余12个文件夹 | |
| 293.0KB | 其余30个文件 |
动态库
最显眼就是文件名包含chromium的动态库。估计小米把chromium项目的android_webview形态按arm64和armeabi两个架构都编译一次,再集成到apk里。
这样小米就能“可控”浏览器内核。
查看了libhyper_chromium.so的符号,基本只有混淆的JNI接口名。
dex文件
没有装安桌的命令行工具,所以没有用apk analyzer。就用Python按dex文件的结构分析,类的方法数根据chromium/android_webview源代码验证基本正确,但是类的方法程序指令占用多少空间验证结果为偏大,就不贴出来,仅使用方法统计值来排序。
贴具体数据前先吐槽:
小米这是把百度全家桶都通过SDK的方式集成到浏览器应用里了吧!?
com.baidu.的类的方法数是最多的!
用户到底装了个浏览器,还是百度 App ?!
dex文件方法数总计:871282
| 类前缀 | 方法数 |
| com/baidu | 133736 |
| androidx | 133367 |
| com/android/browser | 96589 |
| org/chromium | 96100 |
| com/google | 84782 |
| com/duokan | 50017 |
| com/xiaomi | 22520 |
| com/browser | 21241 |
| com/facebook | 17616 |
| com/xunlei | 12973 |
| com/miui | 9950 |
androidx
小米往浏览器里塞一堆非浏览器功能,塞一堆SDK,自然产生的依赖项就多,自然包含Android Jetpack的实现就多。
com.baidu
项目组是偷大懒了吧!?编译选项是不是直接 -keep com.baidu.* ??
寻思在UI上,只认为这浏览器只用到了百度的2个地方:
一是搜索功能上选百度;二是资讯流有个本地页会定位用户并选中所在行政区。
搜索功能本质上不就是浏览器打开百度网页,需要SDK?
位置定位并计算行政区,需要成为dex里方法数最多,占15%方法数的功能?
org.chromium
编译chromium项目里的Java代码,就会产生这些程序。
com.google暂时也当作浏览器内核功能,懒得分析。
com.duokan
真有人用浏览器读电子书吗,电子书平台商还是多看……
小米才不管用户看不看电子书,集成占你空间刷月活就完事。
com.xunlei
诶,给你集成个迅雷网盘。
按道理MIUI的下载有另外一个管理器应用,所以这里的迅雷SDK估计只负责网盘的功能。
com.volcengine
还给你集成AI对话功能哦,AI对话的网页URL,还只能用已登录的小米浏览器访问哦,别的浏览器访问URL不给你回答哦。
不知道专门的视频播放器、搜索功能上那个可选择的“抖音搜索”,和这个火山引擎是否有关系。
com.android.browser
终于到小米浏览器本体了。之所以放到最后,其实从集成的SDK就能看出有多少非浏览器功能了。
类共同前缀 com/android/browser/ 表格里就省略不赘述。
| 类前缀 | 方法数 |
| homepage | 9689 |
| flow | 8219 |
| shortvideo | 7237 |
| search | 5102 |
| bookmark | 4692 |
| util | 2999 |
| databinding | 2353 |
| view | 2339 |
| hybrid | 2215 |
| videov2 | 1993 |
| filemanager | 1871 |
flow
浏览器默认主页是资讯流页面。资讯可以看视频,可以评论,可以卖广告。
shortvideo
浏览器默认页面上有“视频”选项卡,自然是刷短视频、直播的功能。
homepage
分析了类方法数,才知道小米浏览器的主页是可设置的。
设置成关闭资讯流、“视频”、“免费小说”的模式后,就能有“壁纸”的设置。
甚至还有解压的功能,不知道入口在哪里。
还有使用只能用已登录的小米浏览器访问的AI对话网页的功能。
search
内嵌3个搜索入口:“全网搜索”、百度、抖音搜索。
还有历史记录,还能搜索小米浏览器内嵌的短视频、电子书功能对应的资源。
bookmark
书签,不仅是网页URL书签,还是视频、小说等其他内嵌功能的书签。
历史记录,不仅是浏览网页记录,还是其他内嵌功能的历史记录。
“赞过”的视频记录。
UI资源
塞电子书阅读功能还得感恩它60分钟无广告。
浏览器还能AI解数学题。
总结
依赖项管理粗糙,整合一整个百度全家桶,导致应用臃肿。定位为系统自带Web浏览器的应用,塞上电子书阅读、网盘、资讯流、短视频、AI对话等非核心功能,占用了手机原本用于存放网页缓存的空间。浏览器被做成内容分发入口,拿用户手机的计算资源来给自己变现。
题外话
小米应用商店程序占用空间最多的,居然是自动后台下载不删除的广告视频cmsVideo。
我是张靓颖,我玩《三国志战略版》3年了。
甚至有游戏《饥荒》的广告视频。
应用商店能看短剧、种果树……小米看视频的入口真多啊。
还有各种高清的分享icon图。