Android 14设备用Device Explorer下载文件遇ADB权限拒绝问题求助
Android 14设备无法通过Device Explorer访问私有目录文件的解决办法
核心原因
Android 14(API 34)收紧了应用私有目录(Android/data/[包名]/)的访问权限,即使ADB也无法直接访问,这是系统新增的安全限制,和Android 10的宽松策略完全不同。
可行解决方法
方法1:让应用主动导出文件到公共目录
在你的App代码里添加逻辑,把files/picture下的文件复制到公共存储(比如Download目录),之后再用Device Explorer访问公共目录:
// Kotlin示例代码 val sourceFile = File(getExternalFilesDir(null), "picture/目标文件名") val destFile = File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "目标文件名") try { // 可使用Apache Commons IO的copyFile方法,或自己实现文件复制逻辑 FileInputStream(sourceFile).use { input -> FileOutputStream(destFile).use { output -> input.copyTo(output) } } Toast.makeText(this, "文件已导出到Download目录", Toast.LENGTH_SHORT).show() } catch (e: IOException) { e.printStackTrace() }
记得在Manifest中声明对应权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="33"/>
方法2:用ADB命令直接拉取(无需Root)
Android 14允许通过adb exec-out命令绕开权限限制拉取文件,命令格式如下:
adb exec-out run-as 你的包名 cat files/picture/目标文件名 > 本地保存路径
比如拉取test.jpg到电脑桌面:
adb exec-out run-as com.your.package cat files/picture/test.jpg > ~/Desktop/test.jpg
这个命令借助run-as切换到应用进程身份读取文件,不需要Root权限。
方法3:确认debug应用的可调试属性(仅测试用)
如果你的App是debug版本,确保AndroidManifest.xml的application标签里有android:debuggable="true",然后重启ADB服务:
adb kill-server adb start-server
之后再尝试Device Explorer访问,部分场景下能恢复权限,但这个方法可靠性不高,因为Android 14对debug应用的私有目录访问也有限制。
旧方法无效的原因
- 你参考的旧方案是针对Android 10及更早版本的权限规则,不适用于Android 14的新限制。
su命令需要设备Root,你的设备未Root所以无法执行;就算Root了,Android 14访问私有目录还得修改SELinux规则,操作更复杂。
内容的提问来源于stack exchange,提问作者صلي علي محمد - Atef Farouk
相关产品推荐
相关产品推荐

