在 Android 11+ 模拟器中进行测试时,从计算机访问您自己的应用程序的沙箱文件夹

问题描述

在开发应用程序时,我经常遇到管理我自己的应用程序私有目录中的文件的问题,在 Android/data/com.package.name/... 下 - 在那里复制、创建、编辑、删除测试文件。在 Android 11(未来可能会有更新的版本)上,只有在使用 USB 电缆连接时才能在物理设备上使用。在模拟器中,完全无法访问该目录 - adb shell 或 Android Studio 中的平庸“设备文件资源管理器”,当尝试输入或列出 Android/data 文件夹时,目前只给我“权限被拒绝”错误。即使在旧版本的 Android 上使用 adb shell 或“设备文件资源管理器”也不方便,设备文件资源管理器甚至没有列出“隐藏”的文件文件夹(名称以点开头),我也需要管理。

这个问题的最佳解决方案是什么?在旧版本的 Android 上,我使用的是来自 Google Play 的 WebDAV 服务器应用程序,这让我可以将模拟器(或设备)的整个存储安装为开发人员计算机上的虚拟目录或驱动器,但在 Android 11 上,它无法访问我的应用程序的沙盒目录。

解决方法

在使用第 3 方 WebDAV 服务器后,我得出的结论是,Android 11+ 的唯一解决方案是将文件服务器(WebDAV 或类似)嵌入到我自己的应用中,至少在 DEBUG 版本中是这样。

我为 Android 项目克隆了一个非常古老的 GitHub WebDAV 服务器:https://github.com/erspicu/Baxermux.server.http,但是有很多需要更改、修复、增强的地方,我最终创建了一个新的 Android 应用程序项目,从 Baxermux 复制代码片段并继续从那里。您可能会在 GitHub 上看到结果,这是一个非常轻量级的 WebDAV 服务器库,它可以包含在 gradle 的 debugImplementation 语句中,用于管理应用沙箱中的文件(如果需要,也可以管理整个 Android 存储),减去 Android 11+ 下其他应用的沙箱文件夹:

https://github.com/gregko/Mini-WebDAV-server-for-Android

现在我可以使用任何 WebDAV 客户端访问文件夹。在我的 Windows 开发主机上,我使用了优秀的 WebDrive 产品——它将 Mini WebDAV 服务器导出的目录挂载为 Windows 驱动器,并且我可以使用本机 Windows 文件资源管理器或命令提示符,可以像查看和编辑文件一样在我的电脑本地。