将文件夹从 Android 应用程序复制到本地 Windows 目录

Posted

技术标签:

【中文标题】将文件夹从 Android 应用程序复制到本地 Windows 目录【英文标题】:Copy folder from Android app to local Windows directory 【发布时间】:2016-09-04 01:25:05 【问题描述】:

我正在尝试使用 android Adb Command Prompt 将应用容器内的文件夹复制到本地 Windows 文件夹。该设备运行的是 Android 5.1.1,并且未植根

adb pullcp 无法正常工作。如何复制文件夹?

以下方法不起作用:

方法 1

adb shell
adb pull /data/data/DroidSample.DroidSample/files/MetroLog/MetroLogs C:/temp/test

错误:找不到设备

在 shell 内部你看不到 adb pull。见here。

方法 2

DDMS 无法访问data 文件夹。

方法 3

adb shell
run-as DroidSample.DroidSample
cp /files/MetroLog/MetroLogs/ C:/temp/test

cp: /files/MetroLog/MetroLogs/: 没有这样的文件或目录

方法 4

adb shell
run-as DroidSample.DroidSample
cp /data/data/DroidSample.DroidSample/files/MetroLog/MetroLogs/ C:/temp/test

cp: /data/data/DroidSample.DroidSample/files/MetroLog/MetroLogs 是一个目录(未复制)。

This 也不起作用。

方法 5

adb shell
run-as DroidSample.DroidSample
chmod 777 /files/MetroLog/MetroLogs
exit
exit
adb pull /data/data/DroidSample.DroidSample/files/MetroLog/MetroLogs C:/temp/test
adb shell run-as DroidSample.DroidSample
chmod 700 /files/MetroLog/Metrologs

远程对象“/data/data/DroidSample.DroidSample/files/MetroLog/MetroLogs”不存在

所以this 也不起作用。

方法 6

adb shell
mkdir /sdcard/tmp
cp /data/data/DroidSample.DroidSample/files/MetroLog/MetroLogs /sdcard/tmp

cp:/data/data/DroidSample.DroidSample/files/MetroLog/MetroLogs:权限被拒绝

This 也不起作用。

方法 7

唯一成功的就是这个

adb exec-out run-as DroidSample.DroidSample cat "files/MetroLog/MetroLogs/Log - 20160509.log" > C:/temp/test/test.log

但是在这里我没有得到原始文件,而且我还必须知道确切的文件名。此外,我松开换行符,我必须为每个文件执行此操作。不是我想要的。

所以我的想法已经不多了。如何访问内部存储的文件并将其复制过来?

【问题讨论】:

试试看这个***.com/questions/20296713/how-send-data-throgh-wifi 这里有一个适合我的答案***.com/a/8650449/2449199。 【参考方案1】:

你几乎解决了这个问题。由于这种存储是安全的,因此您需要执行一个额外的步骤。您需要将文件从安全位置复制到设备的 SD 卡。然后你可以通过usb或android pull将它复制到任何地方。这是我成功执行的命令序列。

adb shell
run-as DroidSample.DroidSample
cd shared_prefs
cp  DroidSample.DroidSample_preferences.xml /sdcard/DroidSample.DroidSample_preferences.xml
exit
exit
adb pull /sdcard/DroidSample.DroidSample_preferences.xml C:/test/

就是这样。

我非常感谢您发布问题的方式。祝你好运。

【讨论】:

这应该被标记为答案.. 也适用于非 root 手机(虽然适用于应用程序的调试版本)。不适用于实时应用【参考方案2】:

您正在尝试访问 /data android 设备的文件夹,该文件夹在 unrooted 设备中无法访问。

【讨论】:

Here 的问题是明确地访问 unrooted 设备的 data 文件夹中的文件。我可以使用adb exec-out run-as com.packagename cat source > destination 访问data 文件夹中的文件。那为什么会这样呢? 它适用于模拟器。不在实际设备上。它永远无法在实际设备上运行。您和 adb 都没有 /data 分区的读取权限。查看我的答案。 再次在设备上尝试过,它可以工作。也许是因为 Debug 构建? 可能很好,但我对此表示怀疑。根据您最初的问题,您列出的任何方法都不起作用。无法授予您对数据分区的访问权限。 @testing 是的,这是因为调试版本【参考方案3】:

您正试图在实际的 android 设备上获得对 /data 分区的读取权限。即使 app 文件夹是你的,如果没有 root 访问权限,这样的事情是不可能的。由于读取 /data 分区的权限未授予且无法授予,除非您使用的是模拟器。在默认情况下开发人员具有管理员权限的模拟器上,您可以访问数据分区进行读写。在实际设备上你不能。不使用 adb,不使用 DDMS。

所以基本上来说,任何需要访问 /data 下的文件的东西都不起作用。无论您是 sue cp 命令还是 pull 命令。当您的内核读取以 /data/... 开头的路径的开头时,它会说:哎呀,不行。

【讨论】:

以上是关于将文件夹从 Android 应用程序复制到本地 Windows 目录的主要内容,如果未能解决你的问题,请参考以下文章

如何将选定的电子邮件从 android 联系人获取到应用程序? [复制]

将文件从内部存储复制到Android中的外部存储

将目录和文件从 res/raw 文件夹复制到 sd 卡 - android

如何将本地文件复制到远程服务器

将文件/块从 HDFS 复制到从节点的本地文件系统

将文件从 s3:// 复制到本地文件系统