给流氓应用一个「沙箱」,让你的 Android 存储空间整洁如新

829 阅读9分钟
原文链接: zhuanlan.zhihu.com

Android 给了用户足够的权限去管理和利用存储空间,这使得文件管理相对方便。当我们拿到一台崭新的手机,在没有安装和使用任何第三方应用的前提下打开文件管理器,一般会看到这几个文件夹:

  • Alarms (闹铃文件)
  • Pictures (图片)
  • DCIM (相机拍摄的图片)
  • Documents (文档)
  • Download (下载的文件)
  • Movies (影片)
  • Music (音乐)
  • Notifications (通知音)
  • Ringtones (铃声)

而一段时间之后,当我们再次翻阅内部存储空间,往往会发现这里已经杂乱无章地放着二三十个文件夹。这时如果想在这当中找刚收到的文件,就需要较好的眼力了。

如果你也有类似的体验,本文要介绍的这款 App 或能拨乱反正,让秩序重回内部存储。

注:本文适用于 root 用户。

存储空间本不该这么乱

首先我们要了解一些基本知识。

Android 应用的数据主要储存在两个地方,应用私有文件夹内置存储空间:前者在一般情况下不需要用户去干涉,后者则是你一打开文件管理器就所在的目录,任何拥有存储权限的应用都可以在此随意读写文件。

Google 设想了一个关于内部存储空间的美好愿景——所有 App,尤其是第三方 App, 只要分门别类地把文件放到相应的文件夹就好,这样内部存储空间就能在视觉上井井有条,索引文件也方便快捷。

但 Google 这个非强制性的设想注定是「防君子不防小人」。实际情况是,不少应用仰仗着用户授予的存储权限,肆意在内部存储空间建立自己的文件夹,在一些应用中保存下来的音乐、图片或下载的文档,很有可能会被应用擅作主张藏在相当深的路径里。

这使得我们查找,浏览,整理文件的成本直线上升,用户体验极差;同时完全的读写权限也让部分隐私敏感的用户担心个人隐私问题,个人文件和敏感信息处于「任君采撷」的状态。

由著名网红 Android 开发者 Rikka 开发和维护的存储重定向则能完美地解决以上问题。我们曾在不同文章中对这款应用进行过简单介绍,鉴于当前它在稳定性和用户引导方面都已经做得相当完备,尤其是在社区的助力下大多数常用 App 都有现成的规则可用,用户只消手指一点,开箱即用。这里我们不妨对这款「神器」进行一次全面而细致的认识。

关联阅读:

正所谓「无图无真相」,同样一台手机,使用存储重定向重新修剪内部存储之后,我们的内部存储空间长这个样子:

效果可谓是立竿见影。

「重定向」时发生了什么

在存储重定向主界面的「应用管理」中为某款应用开启「存储空间隔离」后,这款应用能够访问到的存储空间就不再是真实的存储位置了。

此时,应用在存储空间中进行的读写操作会像 Android Q 那样被隔离到独立的「沙箱」当中,其中:

  • 应用的私有数据按照 Google 的官方标准存放至 /SDCARD/Android/data/xxx.xxx.xxx/sdcard 目录下(但应用本身并不会意识到这一点),隔离存储空间 /sdcard 无法再与共享存储空间 /SDCARD 直接交互。
  • 被隔离开的应用之间数据相互独立,A 应用的数据 /SDCARD/Android/data/aaa.aaa.aaa/sdcard 与 B 应用的数据 /SDCARD/Android/data/bbb.bbb.bbb/sdcard 不互通。

这两条规则互为补充,构成了存储重定向的核心工作原理。举个例子,当我们为微信开启「存储空间隔离」后,微信原本所认知到的存储空间目录变成了 /SDCARD/Android/data/com.tencent.mm/sdcard,此前会直接在存储空间根目录创建的 /tencent 文件夹自然也会跑到这个文件夹里去。其他应用开启「存储空间隔离」后也会应用类似的规则。

换句话说,如果你有 100 个开启了「存储空间隔离」的应用,那你的手机里就会生成 100 个类似 /SDCARD/Android/data/xxx.xxx.xxx/sdcard 这样的存储空间。

不过这种「沙盒」机制其实也会带来问题,我们不妨举两个与上述两条规则相对应的例子:

  • 启用存储空间隔离的微信无法直接与共享存储空间中的文件夹(如 /SDCARD/DCIM 中的照片)交互。当我们在微信中尝试分享照片时,会发现微信根本读取不到任何照片。
  • 在启用了存储空间隔离的应用中所保存的文件,均位于隔离存储空间当中。埋藏过深有违「提高文件索引效率」的初衷。

为此,存储重定向又引入了配套的解决方案。

首先是共享存储空间访问机制

这一部分决定了被隔离的应用能够访问哪些共享存储空间目录。如果你喜欢用微信分享音乐,在为微信启用重定向后,可能就需要允许微信访问来自共享存储空间的 /Music 文件夹。

其次是「同步文件夹」规则

这一部分让开启了重定向的应用存储在隔离存储空间的数据直接与共享存储空间中的特定文件夹进行关联,这样一来,我们就能直接在共享存储空间中访问那些实际埋藏在隔离存储空间中的应用了。

「重定向」实操

看到这里你可能会开始觉得「有点绕」了。别怕,我们这就用一个实际的例子告诉你,拿到一个应该进行重定向操作的应用时我们该如何设置。

这里用到的例子还是微信。

在对微信开启了存储空间隔离的同时,微信就不能像以往那样直接在存储空间根目录下随意创建文件了。

但为了保证微信聊天的过程中还能正常「斗图」,我们得让微信拥有读取共享存储空间中常见图片文件夹的权限;于是我们下划在「可访问的文件夹」设置中打开「来自共享存储空间的文件夹」选项,然后按需选择可访问的共享存储空间文件目录。

选择完毕后,我们还可以在「来自其他应用的隔离存储空间的文件夹」设置下进行一些额外设置,比如让重定向后的 QQ 拼音输入法在微信里正常发送表情。

该区域内最后的「查看隔离存储空间」和「查看相册」选项,则用来帮助确认微信在重定向后的读取权限是否正常。

解决重定向后的读取权限后继续下划来到「应用保存文件行为」设置,在这里,我们接着解决重定向后的文件保存问题。

存储重定向提供了非常有针对性的社区规则来同步我们在使用微信的过程中保存的图片,例如我们可以将隔离存储空间内用于保存微信图片的目录直接与共享存储空间内的 /Download/WeChat 关联,这样一来,我们在重定向后的微信中所保存的图片,就能(在视觉上)井然有序地归入下载文件夹当中了。

至此我们便完成了对微信的重定向和重定向后的读写配置。

省心省事的规则和模版

前文中提到了不少规则,有些规则看起来有点复杂,第一次接触的新人看起来可能有些为难。不过不用担心,借助社区的力量,大多数常用的 App 都已经有好心人提供了现成的规则,只要能够连接到储存规则的 Github,你就能够享受这便利:「到底该不该开启重定向」,「文件该存储在哪」这两个问题基本不用自己操心,十分省心。


同时,App 中有不少属于同一类,都需要能访问同样的一批文件夹,比如微信、QQ 和 Telegram 作为 IM, 都需要能访问 /SDCARD/DCIM/SDCARD/Pictures 这两个文件夹来进行「斗图」 ,这时开发者提供的「默认可访问文件 & 模版」这项功能就可以减少劳动量。你可以自己先行创建好自己的模版或者直接用开发者提供的模版,然后直接将模版套用在其他需要设置的 App 上,省去了自己再重新设置的功夫,这可以说是相当省事了。

小结

最后,想必你也在主界面看到了开发者强推的「增强模式」,这个模式包含了不少额外功能,如「修复应用间交互问题」「提前生效」「保证抢先生效」和「文件监控」等等,配合 Magisk 模块能够实现最为完整的重定向体验,因此非常建议大家使用。

使用增强模式需要安装由开发者提供的 Magisk 模块,包括 Riru - CoreRiru - Storage Redirect 两部分。刷入的过程可能导致一些预料之外的结果,比如开不了机卡开机动画(即 bootloop),所以务必学会利用 Magisk Manger For Recovery 这个模块在 TWRP 中卸载模块以及提前做好备份以防万一。

参考资料: