如何使用 adb 将文件复制到可从 PC 访问的 android 目录

Posted

技术标签:

【中文标题】如何使用 adb 将文件复制到可从 PC 访问的 android 目录【英文标题】:How to copy file using adb to android directory accessible from PC 【发布时间】:2017-01-19 08:52:21 【问题描述】:

如果您将 android 设备连接到 PC,您可以浏览文件和目录。可以使用Environment.getExternalStorage() 获取此目录。您可以从应用程序中使用它并创建可访问的文件和目录。它工作正常。

在我的设备上,此路径类似于 /storage/emulated/0,如果我尝试 adb push 访问此目录,我将收到拒绝访问错误。是否可以使用adb 将文件复制到与 Windows 资源管理器相同的文件夹中?

D:\...\tools>adb push ACCOUNTS.DB /storage/emulated/0
failed to copy 'ACCOUNTS.DB' to '/storage/emulated/0': Permission denied
58969 KB/s (606505 bytes in 0.010s)

我正在实现自动导入/导出,我希望在没有adb shell 的情况下可以访问文件,以防万一出现问题。

目前使用变量$EXTERNAL_STORAGE 作为解决方法,它适用于adb 和应用程序。

设备:Asus Fonepad 7,Android 5.0,试用 Genymotion Custom Tablet 6.0 - 工作正常。

【问题讨论】:

adb push ... /storage/emulated/0 对我来说很好,在运行 Android 6.0.1 的 Nexus 5X 上进行测试。 这是问题所在,我需要它可靠地工作,但它在我自己的设备上失败,与模拟器一起工作。 【参考方案1】:

这很简单,内部存储在非 root 设备上不可用。正如bwt answer 中提到的,您只需要将数据推送到 sdcard:

adb push somefile /sdcard/somefile

通过从文件系统中检索文件,您也会遇到一些问题。但是对于从调试应用程序中提取数据库的情况 - 您只需要通过 chmod 更改文件权限。 这里有一个有用的链接 - XDA guys about adb

【讨论】:

【参考方案2】:

尝试使用/sdcard/。尽管强烈建议不要在 代码 中这样做。这似乎是 adb 的唯一方法:

$ adb push somefile /storage/emulated/0/somefile
[100%] /storage/emulated/0/somefile
adb: error: failed to copy 'somefile' to '/storage/emulated/0/somefile': Read-only file system

$ adb push somefile /sdcard/somefile
[100%] /sdcard/somefile

顺便说一句,在我的设备上它们没有相同的值:Environment.getExternalStorage() 指向/storage/emulated/0//sdcard 指向/storage/emulated/legacy

【讨论】:

文件已成功复制(我可以使用 ES Explorer 在正确的位置看到它),但在 PC 上看不到它。尝试重新连接,等待......也许我需要以某种方式触发索引。 嗯,看来MEDIA_SCANNER_SCAN_FILE广播可以解决这个问题。

以上是关于如何使用 adb 将文件复制到可从 PC 访问的 android 目录的主要内容,如果未能解决你的问题,请参考以下文章

电脑命令行控制安卓手机

adb怎么删除图片

adb 命令 pc端 "复制粘贴" 文本到android设备

如何在不先将设备连接到计算机的情况下通过 Wifi 执行“adb logcat”? [复制]

Android adb执行可执行文件elf

【Android】如何使用ADB进行调试