是否有可能看到来自adb shell的应用程序数据与我看到它安装SD卡的方式相同?

时间:2012-01-26 10:54:11

标签: android adb

我正在测试Android应用程序 我想留意

的内容
/sdcard/Android/data/com.myapplication   
应用程序运行时

但是如果SD卡作为磁盘驱动器安装在PC上(访问图片和视频),我的应用程序无法正常工作 所以我以为我可以使用adb shell。但它不允许我访问同一个文件夹:

ls /sdcard/Android/data/com.myapplication  
/sdcard/Android/data/com.myapplication: Permission denied

在Stack Overflow上,我发现通过adb shell查看应用程序数据:

run-as com.myapplication

这样做我发现自己在文件夹

/data/data/com.myapplication

我感到困惑的是,我在这里看到的数据与我通过PC浏览SD卡内容的数据不同。

$ ls
ls
files
databases
shared_prefs
lib

我在文件下面看到了sdcard Android / data / com.myapplication文件夹下的内容,但不是我想要的内容。此外,所有其他文件夹都不同 这个

之间是否有相关性
/data/data/com.myapplication

可通过adb和

访问的文件夹
/sdcard/Android/data/com.myapplication 

可通过PC访问的文件夹?
有没有办法在adb shell中查看后者中存在的文件?

3 个答案:

答案 0 :(得分:65)

作为一般规则,Internal storage上由应用程序存储的文件(默认情况下不是WORLD_READABLE)仅供您的应用程序阅读。当您使用pull尝试adb pull这些文件时,您将在NOT rooted设备上获得权限被拒绝。有办法绕过这个,我稍后会解释。另一方面,External storage中的文件可供用户和所有其他应用程序阅读。所以这取决于你追求的是什么。

现在,为了读取internal存储空间(/data/data/com.app.name)中的文件,您无法直接读取这些文件,但您可以将其移至external存储空间然后阅读他们就像这样。

adb shell "run-as com.yourappName cat /data/data/com.yourappName/files/myfile.txt > /sdcard/Downloads/myfile.txt"

然后,您可以从外部存储中提取文件,而不会出现任何权限问题。

adb pull /sdcard/Downloads/myfile.txt

如果您不确定要浏览哪个文件或要浏览所有文件,请使用shell浏览所有应用程序文件。

adb shell
run-as yourappPackageName
cd /data/data/youappPackageName
ls -all

答案 1 :(得分:0)

我已经能够通过以下Adb命令获取应用程序正在使用的Sqlite数据库:

adb exec-out run-as xxx.xxx.xxx.xxx cat "/data/data/xxx.xxx.xxx.xxx/databases/databasefile.db" > %userprofile%\Desktop\databasefile.db

其中xxx.xxx.xxx.xxx是您的Android应用程序的bundleId,而databasefile.db是Sqlite数据库的名称

因此我想您可以获取应用程序的任何现有文件,知道它在哪里,并使用adb exec-out run-as xxx.xxx.xxx.xxx命令

答案 2 :(得分:-1)

您可以通过之前在博客中发布的实用程序访问它。 它是一个java实用程序,通过它只需提供应用程序的包名称即可获取应用程序数据文件夹中的所有文件夹。 只需app可以调试。

Extract Android Files

真的有用