是否可以从adb外壳中看到应用程序数据,就像我看到它安装SD卡一样



我正在测试一个Android应用程序
我想关注的内容

/sdcard/Android/data/com.myapplication   

在应用程序运行时
但如果sd卡作为磁盘驱动器安装在电脑上(访问图片和视频),我的应用程序就无法正常工作
所以我想我可以使用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中查看后者中的文件?

通常情况下,Internal storage上由应用程序存储的文件(默认情况下不是WORLD_READABLE)只能供应用程序读取。当您尝试使用adb pullpull这些文件时,您将在非根设备上获得拒绝的权限。有一种方法可以绕过这一点,我稍后会解释。另一方面,External storage中的文件可供用户和所有其他应用程序读取。所以这取决于你想要什么。

现在,为了读取内部存储器(/data/data/com.app.name)中的文件,您不能直接读取这些文件,但您可以将它们移动到外部存储器,然后像这样从那里读取。

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

我已经能够通过这个Adb命令获得应用程序正在使用的Sqlite DB:

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

其中xxx.xxx.xxx.xxx是Android应用程序的bundleId,databasefile.db是Sqlite db 的名称

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

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

提取安卓文件

确实有效

最新更新