本文最近更新于 2019 年 6 月 10 日「 星期一 」

小编的话

小编认为「存储重定向」的整体设计和模式非常好。而且,通过在线规则可以帮助大家更快上手和配置,另一方面,开发者也可以根据反馈的规则进一步完善应用。

你的存储空间是什么样子的?

Android 应用的数据主要储存在两个地方,应用“私有文件夹”和“内置存储空间”。日常生活中,通常我们不会去使用前者,后者往往则是我们打开文件管理器的默认目录,而且任何拥有存储权限的应用都可以在此读写文件。

理想情况下,所有 App,尤其是第三方 App, 只要分门别类地把文件存放在相应的文件夹,例如 MusicPicturesDocumentsDownload 等,内部存储空间就会井井有条。

实际情况是,不少应用借助用户授予的存储权限,肆意在内部存储空间建立自己的文件夹,我们的存储空间可能是这样的:


截图出自酷安网友:木已呈舟

解决方法

由 Xingchen & Rikka 开发的「存储重定向」正是为解决以上问题。尽管在 Google Play 上面该应用仍为测试版,但稳定性已相当可靠,结合大量网友共享的规则,上手也非常容易。

经过一番设置和整理后的存储空间是这样:


截图出自酷安网友:木已呈舟

清晰工整的目录结构便于查看检索,有助于使用效率。对小编而言,借助 FolderSync 定期同步指定的几个目录(例如 DownloadDocuments 等)就完成了手机的整机重要数据备份,实在是方便极了。

设计

(以下介绍大量引用开发者 RikkaW 的原文——技术细节

应用只会建立 /data/misc/storage_redirect 文件夹用于存放可执行文件及配置文件。

启动时,会运行两个进程,storage_redirect 和 storage_redirect_server。storage_redirect 负责核心功能;storage_redirect_server 会添加一个服务到 ServiceManager,负责与存储重定向应用通信。

采用存储空间隔离的方式实现重定向。在应用进程建立后,进入应用进程的挂载命名空间进行一系列的绑定挂载。

比如会挂载 /mnt/runtime/write/emulated/0/Android/data/com.example/sdcard/storage/emulated/0,那么对于应用进程,/storage/emulated/0 实际就是 /storage/emulated/0/Android/data/com.example/sdcard

对“可访问文件夹”中设置的各种规则,本质就是追加了更多绑定挂载。另外,无论怎么设置,默认会至少会挂载 Android/data/com.exampleAndroid/media/com.exampleAndroid/obb/com.exampleAndroid/data/com.example/sdcard 中。

借助 inotify 与硬链接实现“同步文件夹”。另外,inotify 似乎并不能正确监控到文件被移走/移入,所以只有建立和删除可以被正确处理。

简单来说:应用本身没有多余的权限;除了核心重定向功能之外,另有“可访问文件夹”以支持被隔离应用的正常运行和使用,例如导入(input)图片等,“同步文件夹”则可以帮助我们存储和“传送”应用输出(output)。

使用过程中,可以在相关设置处直接查看“使用帮助”,方便上手。

另外应用还很贴心的加入了在线规则,支持集纳网友的使用经验供其他用户参考。

安装

下载应用安装后为试用版本,可以重定向 3 个应用。

下载地址:

推荐使用「增强模式」(需要 MagiskRiru - Core)实现最为完整的重定向体验,如「修复应用间交互问题」「提前生效」「保证抢先生效」和「文件监控」等等。

使用

首先以微信为例,点击“启用存储空间隔离(重定向)”右侧开关开启微信重定向。

在“可访问的文件夹”中选择“来自共享存储空间的文件夹”。

如果使用了「微X模块」1,可以通过“自定义”选择它在共享存储空间生成的 WechatXposed 和其他需要的文件夹(根据个人情况)。

使用微信过程中,我们会保存照片、视频、文件等,“应用保存文件行为”设置可以帮助我们把保存的内容重定向到指定的共享存储空间。

设置好以后,开启微信即生效。

注意:截至本文发布时的 1.6.12 版本 如果已经在存储空间生成了 Tencent 文件夹,则说明在开启重定向之前运行过微信,这样在开启重定向以后需要手动删除存储空间的 Tencent 文件夹。

对于 Blocker2 类的应用设计,其“应用保存文件行为”包含子文件夹,所以在定义规则时,不要忘记勾选“包含子文件夹”选项。

对于 INKredible 类的应用设计,以 INKredible PRO 1.1.1 版本 为例,应用会在共享存储空间生成 /INKredible PRO/Documents 作为工作目录,在应用启动和使用时读取和修改该目录。应用本身并没有自定义工作目录的设置,类似的应用不建议开启存储重定向。

注意事项


会员专享内容

点击查看
「安卓果酱」会员计划

相关链接

扩展阅读

  1. 一个集合了很多强大功能的微信 Xposed 插件,详见一些值得推荐的 Xposed 模块

  2. 作为应用组件和 IFW 管理的后起之秀,可以用来代替写轮眼应用控制器,开发者称,网络版正在开发中。应用开源,项目地址点击这里,酷安下载地址点击这里