从一个抽屉的底部开始
上周二下午,我在整理书桌最下层那个抽屉时,翻出一台屏幕左下角有一道裂纹的旧手机——2019 年买的,型号记不全了,但开机密码还是那串。它曾经被我用来装各种零碎的资料型应用,其中就有 49图库手机端下载 装进去的那个版本。系统提示可以连上电脑备份,我就顺手把 /Android/data 下的目录树导了出来,本来只想看看还剩多少空间可用。
导出来的清单有 2841 个文件,占 1.7 GB。我在里面翻到一个名为 com.gallery49.mobile 的目录,缓存子目录 cache/thumbs 下有 612 张缩略图,最后修改时间停在 2019 年 8 月 3 日 14:27。这个时间点之所以记得清楚,是因为同一天我在一本旧笔记的扉页上写了一行字:“装完就去看流程,别急着删。”翻到那页,字迹还在,蓝黑墨水已经有点洇开。
那 612 张缩略图说明了什么
我把这 612 张缩略图按修改时间排了一遍,发现它们集中在 2019 年 8 月 3 日到 8 月 19 日之间生成,平均每天 35 张左右,最多的一天是 8 月 11 日,71 张。这个分布本身没什么稀奇,但它说明了一个常被忽略的事实:手机端在下载与浏览之间其实存在一层独立的缓存层,缓存不是附属品,而是整个读取链路里最先被写、也最先被牺牲的部分。我在清单里同时找到了一份 index.db,大小 412 KB,SQLite 格式,用命令行打开后,条目数和缩略图数量对得上,误差 3 条——那 3 条正好是我手动删过的测试条目。
这一点让我兴奋了很久。因为它意味着,所谓“下载”在工程意义上并不是一个单点动作,而是一串有时间戳的状态迁移:请求、落盘、生成缩略图、写索引、最后才是界面可见。你看到的每一张图,背后至少躺着四个文件。
“缓存是可再生的,索引不是。”——这是我 2019 年在那本笔记第 41 页写下的一句话,今天看依然成立。
一次误删,和它留下的教训
为了验证这个判断,我做了一件有点冒险的事:把 cache/thumbs 整个目录移到别处,再打开应用。结果是界面一片空白,但 index.db 完好,条目数没有变化。这就把界线划清楚了——缩略图丢了可以重建,索引丢了才是真的麻烦。重建的过程大约花了 6 分钟,612 张里回来了 598 张,剩下的 14 张对应的原图本身就已经不在设备里。这个数字我记在便签上,贴在了显示器边框上。
顺便说一句可能不太讨喜的话:我认为大多数关于“下载”的教程都把重点放错了地方,它们花大量篇幅讲怎么点按钮,却几乎不提安装之后文件去了哪、什么时候会被清掉。这个判断我说出来时,有位做安卓逆向的朋友当场表示不同意,他说普通用户根本不需要知道这些。我尊重他的经验,但我还是坚持我的看法——不知道文件在哪的人,删东西的时候是没有底气的。
回到安装包本身
清单里还留着一份当年下载的安装包,文件名末尾带着版本号,大小 38.6 MB。我核对过它的签名时间与目录创建时间,相差不到 4 分钟,说明当时是下载完立刻安装的。这种“立刻安装”的习惯其实有风险,因为安装包一旦被系统清理程序扫到,重装时就只能重新找来源。站点里那篇 49图库资料库免费打开历史记录搜索链接 就是我后来用来追溯来源的入口之一,它把历史记录和搜索入口放在同一页,省掉了我不少翻找的时间。
另外,如果你也在做类似的核对,可以顺手看看 tk49免费打开 这个页面,它记录的打开方式与我这台旧设备上的行为基本一致,只在首次加载时多了一次权限确认。这个差异我前后复现了三次,三次都出现,所以不是偶发。
写在核对之后
整件事核完,用了大约四个晚上,最长的一次是从晚上 10 点坐到凌晨 1 点 20 分。收获不是“我知道了怎么下载”,而是我终于能把那 1.7 GB 里的每一个目录说出用途。这听起来很笨,但我认为值得。今天早上我把清单重新打印了一份,用红笔在 index.db 那一行画了圈,夹进了那本 2019 年的笔记里,就在第 41 页旁边。