# 注入文件提供器
本功能通过在 APK 文件中注入一个专门构造的 DocumentsProvider (opens new window) 来对外导出 data 目录的文件操作接口,再结合 MT 的「本地存储」功能,实现无 ROOT 访问与修改 data 目录。
# 功能演示
首先找到要注入的 APK:
点击「功能」,然后选择「注入文件提供器」:
处理完成后会得到一个 xxx_dp.apk 文件,安装这个文件并打开一次。
返回 MT,打开侧拉栏,点击右上角的「添加本地存储菜单」:
在新弹出的界面的侧拉栏中找到并选中目标 APP,然后点击底部的「选择」:
该界面在不同的安卓系统会不一样,但基本都差不多:
返回 MT 后,就会看到我们刚刚添加的本地存储,点进去后就可以访问与修改该 APP 的 data 目录了:
# 功能支持
导出的目录:
目录名称 | 对应的真实路径 |
---|---|
android_data | /sdcard/Android/data/包名 |
android_obb | /sdcard/Android/obb/包名 |
data | /data/data/包名 或者 /data/user/0/包名 |
user_de_data | /data/user_de/0/包名 (新增于 MT 管理器 2.14.3 版本) |
支持的操作:
- 浏览文件列表
- 新建/删除/修改/重命名/移动 文件
- 查看文件权限与所有者
- 修改文件权限和时间
- 创建软链接
不支持修改文件所有者
第三方文件管理器:
DocumentsProvider 属于系统支持的功能,因此所有支持 DocumentsProvider 的第三方文件管理器也可以进行访问,但由于部分接口为 MT 定制,因此不支持以下功能:
- 无法判断文件是否为软连接
- 无法查看文件权限与所有者
- 无法修改文件权限和时间
- 无法创建软链接
# 方案优势
本方案通过 DocumentsProvider 接口来实现,支持 Android 5.0 及以上系统,遵循系统规范,基本可以保证对未来所有 Android 版本的兼容性。
在此之前,要实现无 ROOT 访问与修改 data 目录,被建议最多的是使用 sharedUserId 来实现。但使用 sharedUserId 的前提是两个 APP 之间必须要有相同的签名,光是这点 MT 就不可能支持。
并且谷歌也已经申明 (opens new window)了会在未来的 Android 版本中删除它,该方法终究会失效。
# 局限性
虽然本功能提供了无 ROOT 访问与修改 data 目录的能力,但其背后是基于对 APK 的修改来实现,因此如果 APK 存在自校验,就很可能导致本功能无法正常使用。
另外在浏览目标 APP 的文件时,其进程必须正在运行,否则将无法获取到任何内容。不过 MT 已经针对这点进行了检测,如果目标进程未启动,将会弹出提示并支持一键启动。