# 注入文件提供器

本功能通过在 APK 文件中注入一个专门构造的 DocumentsProvider (opens new window) 来对外导出 data 目录的文件操作接口,再结合 MT 的「本地存储」功能,实现无 ROOT 访问与修改 data 目录。

# 功能演示

首先找到要注入的 APK:

alt

点击「功能」,然后选择「注入文件提供器」:

alt

处理完成后会得到一个 xxx_dp.apk 文件,安装这个文件并打开一次


返回 MT,打开侧拉栏,点击右上角的「添加本地存储菜单」:

alt

在新弹出的界面的侧拉栏中找到并选中目标 APP,然后点击底部的「选择」:

alt

该界面在不同的安卓系统会不一样,但基本都差不多:

alt

返回 MT 后,就会看到我们刚刚添加的本地存储,点进去后就可以访问与修改该 APP 的 data 目录了:

alt

alt

# 功能支持

导出的目录:

目录名称 对应的真实路径
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 版本中删除它,该方法终究会失效。

alt

# 局限性

虽然本功能提供了无 ROOT 访问与修改 data 目录的能力,但其背后是基于对 APK 的修改来实现,因此如果 APK 存在自校验,就很可能导致本功能无法正常使用。

另外在浏览目标 APP 的文件时,其进程必须正在运行,否则将无法获取到任何内容。不过 MT 已经针对这点进行了检测,如果目标进程未启动,将会弹出提示并支持一键启动。