在不root手机的情况下读取Data目录下的文件

  1. 127|shell@android:/ $ cd /data  
  2. cd /data  
  3. shell@android:/data $ ls  
  4. ls  
  5. opendir failed, Permission denied  

你是没有权限的。

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

[plain] view plain copy

  1. shell@android:/data $ run-as com.your.package  
  2. run-as com.your.package  
  3. shell@android:/data/data/com.your.package $ cd /data/data/com.your.package  
  4. cd /data/data/com.your.package  
  5. shell@android:/data/data/com.your.package $ ls  
  6. ls  
  7. cache  
  8. databases  
  9. lib  
  10. shared_prefs  
  11. shell@android:/data/data/com.your.package $ cd databases  
  12. cd databases  
  13. shell@android:/data/data/com.your.package/databases $ ls  
  14. yourpackagename.db  
  15. $ cat preferences.db > /mnt/sdcard/yourpackagename.db     

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

参考资料

Read Android Data Folder Without Rooting

 

对文件进行增删

法1:

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

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

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

 

UPDATE

the command for Android 5.0+ to save /data/data/package.name/databases/file would be:

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

 

法2:

 
  1. > adb shell

  2. shell $ run-as com.example.package

  3. shell $ chmod 666 databases/file

  4. shell $ exit ## exit out of 'run-as'

  5. shell $ cp /data/data/package.name/databases/file /sdcard/

  6. shell $ run-as com.example.package

  7. shell $ chmod 600 databases/file

  8. > adb pull /sdcard/file .