在不Root手机的情况下读取应用Data目录下的文件

使用adb命令时的错误


如果直接使用adb命令会产生以下错误:

127|shell@android:/ $ cd /data  
cd /data  

shell@android:/data $ ls  
ls  
opendir failed, Permission denied

你是没有权限的。

正确使用adb读取data目录下的文件方式


shell@android:/data $ run-as com.your.package  
run-as com.your.package  

shell@android:/data/data/com.your.package $ cd /data/data/com.your.package  
cd /data/data/com.your.package 
 
shell@android:/data/data/com.your.package $ ls  
ls  
cache  
databases  
lib  
shared_prefs  

shell@android:/data/data/com.your.package $ cd databases  
cd databases  

shell@android:/data/data/com.your.package/databases $ ls  
yourpackagename.db 
 
$ cat preferences.db > /mnt/sdcard/yourpackagename.db

将你要访问的package目录下的db文件拷贝到sdcard中,这样就可以正常访问了!

使用限制


1.在Android 4.3的某些版本上面,存在BUG,导致这个功能是没办法使用的,一般会提示android run-as permission denied
具体的讨论参考run-as doesn't work after update to 4.3

2.应用的AndroidManifest.xml中必须设置了android:debuggable="true"

从Android设备拉取文件


4.x系统

$ adb shell "run-as package.name chmod 666 /data/data/package.name/databases/file"

$ adb pull /data/data/package.name/databases/file .

$ adb shell "run-as package.name chmod 600 /data/data/package.name/databases/file"

5.x系统

$ adb exec-out run-as package.name cat databases/file > file

参考资料


在不root手机的情况下读取Data目录下的文件
android adb, retrieve database using run-as

发布者

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注