如何获取自己的Android应用程序的(私人)数据?

Cal*_*laf 88 android adb

尝试使用单个文件

adb pull /data/data/com.corp.appName/files/myFile.txt myFile.txt
Run Code Online (Sandbox Code Playgroud)

失败了

failed to copy '/data/data/com.corp.appName/files/myFile.txt myFile.txt' to 'myFile.txt': Permission denied
Run Code Online (Sandbox Code Playgroud)

尽管在设备上启用了USB调试.

我们可以通过古老的路线解决问题

adb shell
run-as com.corp.appName
cat files/myFile.txt > myFile.txt
Run Code Online (Sandbox Code Playgroud)

但是对于多个文件来说这是不实用的.

如何将目录/data/data/com.corp.appName/files拉到我的MacBook?

直接或通过`/ storage/sdcard0/myDir中的传输(从我可以继续安装Android文件传输)这样做很好.

补充评论

可能就是跑步

adb backup  -f myFiles com.corp.appName
Run Code Online (Sandbox Code Playgroud)

将生成我正在寻找的文件.在这种情况下,我正在寻找一种方法来解压缩/解压缩生成的备份!

Cal*_*laf 95

adb backup将编写特定于Android的存档:

adb backup  -f myAndroidBackup.ab  com.corp.appName
Run Code Online (Sandbox Code Playgroud)

可以使用以下命令将此存档转换为tar格式:

dd if=myAndroidBackup.ab bs=4K iflag=skip_bytes skip=24 | openssl zlib -d > myAndroidBackup.tar
Run Code Online (Sandbox Code Playgroud)

参考:

http://nelenkov.blogspot.ca/2012/06/unpacking-android-backups.html

在该链接中搜索"更新".


或者,使用Android备份提取程序从Android backup(.ab)文件中提取文件.

  • 用于未使用zlib编译openssl的Python替代方法:`dd if = data.ab bs = 1 skip = 24 | python -c"import zlib,sys; sys.stdout.write(zlib.decompress(sys.stdin.read()))"| tar -xvf -`(来自上方) (16认同)
  • Mac上的openssl不支持'zlib'命令:( (6认同)
  • 我的MacBook上的`dd`命令在工作中从未取得过任何成功.相反,我使用`java -jar ./abe.jar unpack data.ab data.tar`.您可以从http://sourceforge.net/projects/adbextractor/files/?source=navbar下载abe实用程序 (6认同)
  • `bs = 24 skip = 1`比`bs = 1 skip = 24`快得多(在我的系统上,38.6 MB/s vs 1.7 MB/s):) (5认同)
  • 此外,我注意到我必须强制关闭我要备份其数据的应用程序,否则备份是空的!(Android 4.4.2)这与清单显示`android:allowBackup ="false"`时的效果相同 (3认同)
  • 我不知道为什么我们像我们一样经常使用 `dd`。这里`tail -c+25 myAndroidBackup.ab | ...`很好。 (3认同)
  • 更好的是,直接将文件解压缩到本地目录:`dd if = myAndroidBackup.ab bs = 24 skip = 1 | openssl zlib -d | tar -x` (2认同)

小智 48

我有同样的问题,但解决了它运行如下:

$ adb shell
$ run-as {app-package-name}
$ cd /data/data/{app-package-name}
$ chmod 777 {file}
$ cp {file} /mnt/sdcard/
Run Code Online (Sandbox Code Playgroud)

在此之后你可以运行

$ adb pull /mnt/sdcard/{file}
Run Code Online (Sandbox Code Playgroud)

  • 仅当应用程序可调试时才有效. (18认同)
  • 谢啦!您还需要使用“cp -r”使其成为递归副本。/sf/ask/2797313501/ (3认同)

小智 29

这对我有用:

adb -d shell "run-as com.example.test cat /data/data/com.example.test/databases/data.db" > data.db
Run Code Online (Sandbox Code Playgroud)

我正在将数据库直接打印到本地文件中.

  • 正是这个命令导致我的db文件被破坏.但是我让它按照以下步骤工作:------``adb shell` ------在shell里面运行`run-as com.example.test` ------在shell里面运行`cat ... db>/mnt/sdcard/file.db` ------`adb pull /mnt/sdcard/file.db .`--结束(对不起,换行符不是工作) (3认同)

Eri*_*jen 21

在MacOSX上,通过结合Calaf和Ollie Ford的答案,以下内容对我有用.

在命令行上(确保adb在你的路径中,我的位于〜/ Library/Android/sdk/platform-tools/adb)并且在你的android设备插入并处于USB调试模式时,运行:

 adb backup -f backup com.mypackage.myapp
Run Code Online (Sandbox Code Playgroud)

您的Android设备将要求您备份数据的权限.选择"备份我的数据"

等一会儿.

文件备份将显示在您运行adb的目录中.

现在运行:

dd if=backup bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" > backup.tar
Run Code Online (Sandbox Code Playgroud)

现在您将拥有一个backup.tar文件,您可以像这样解压缩:

 tar xvf backup.tar
Run Code Online (Sandbox Code Playgroud)

并查看应用程序存储的所有文件.

  • 我得到:“zlib.error:解压缩数据时出错-3:不正确的标头检查”我的备份虽然要求密码进行加密。这个python方法不需要密码来解密备份。上面例子中注释中的 abe.jar 要求输入密码,但使用该方法解压后我没有得到所有文件。 (2认同)

Tam*_*mas 6

您可以在下面使用此shell脚本.它也可以从应用缓存中提取文件,而不是像adb backup工具一样:

#!/bin/sh

if [ -z "$1" ]; then 
    echo "Sorry script requires an argument for the file you want to pull."
    exit 1
fi

adb shell "run-as com.corp.appName cat '/data/data/com.corp.appNamepp/$1' > '/sdcard/$1'"
adb pull "/sdcard/$1"
adb shell "rm '/sdcard/$1'"
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样使用它:

./pull.sh files/myFile.txt
./pull.sh cache/someCachedData.txt
Run Code Online (Sandbox Code Playgroud)

  • 最好的部分是当你不给出参数然后`rm/sdcard /`替代,幸运的是它不是`-rf`. (10认同)
  • 请务必添加**论据!**说真的,这有点危险...... (3认同)
  • 你可以直接找到主机上的文件:"adb shell run-as com.whatever.Fnord cat /data/data/com.whatever.Fnord/databases/logging.db>/tmp/foo"(其中/ tmp/foo是主机上的文件,而不是android设备) (3认同)

Hen*_*nry 6

如果您使用的是Mac机和一台三星手机,这是你必须做什么(因为run-as 不工作对三星和zlib 不工作在Mac)

  1. 备份应用程序的数据目录 adb backup -f /Users/username/Desktop/data.ab com.example

  2. 您将被要求输入密码以在您的手机中加密,请勿输入任何密码。只需点击“备份我的数据”。请参阅如何进行备份?

  3. 成功备份后,您将data.ab在桌面中看到文件。现在我们需要将其转换为tar格式。

  4. 为此,请使用Android 备份提取器下载| 源代码

  5. 下载它,你会看到abe.jar文件。将此添加到您的 PATH 变量中。

  6. 执行此命令以生成tar文件:java -jar abe.jar unpack /Users/username/Desktop/data.ab /Users/username/Desktop/data.tar

  7. 解压data.tar文件以访问所有文件

  • 完全遵循这一点,`data.tar` 只是提取到一个 `data.tar.cpgz` @henry (2认同)

Jon*_*Jon 5

较新版本的Android Studio包括设备文件资源管理器,我发现这是一种方便的GUI方法,可以从开发的Nexus 7下载文件。

您必须确保已在设备上启用USB调试

  1. 单击视图>工具窗口>设备文件资源管理器,或单击工具窗口栏中的设备文件资源管理器按钮以打开设备文件资源管理器。
  2. 从下拉列表中选择一个设备。
  3. 在文件资源管理器窗口中与设备内容进行交互。右键单击文件或目录以创建新文件或目录,将所选文件或目录保存到您的计算机,然后上载,删除或同步。双击文件以在Android Studio中将其打开。

    Android Studio将您以此方式打开的文件保存在项目外部的临时目录中。如果您对使用设备文件资源管理器打开的文件进行了修改,并且想要将所做的更改保存回设备,则必须手动将文件的修改后的版本上传到设备。

文件管理器

完整文件


归档时间:

查看次数:

101953 次

最近记录:

7 年,5 月 前