You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 00:52:11