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

来源:互联网 发布:师洋的淘宝骂人截图 编辑:程序博客网 时间:2024/05/18 00:21


如何把/dada/dada/cn.com.fetion/databases/xxx.db 变为可读可写的所有权限:






修改结果:




自己写的应用如何才能获取 /data/data/com.xxx.xxx/database/xxx.db 这个文件的读取权限? 
首先机子已Root,应用也获得Root权限,结果执行的时候还是报的 “ 打开数据库失败”。。。 


答案:

复制出来再打开 用java的 Runtime.getRuntime().exec执行以下代码

su -

cp /data/data/com.xxx.xxx/database/xxx.db /scard/ xxx.db


然后到scard打开xxx.db再打开。



另一种方法:修改/data/data/com.xxx.xxx/database的读取权限和xxx.db的权限。也是用以上的方法去执行 

su -

chomd 777 /data/data/com.xxx.xxx/database




























使用adb命令时的错误

如果直接使用adb命令会产生以下错误:
[plain] view plaincopy
  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 plaincopy
  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


如果不通过root权限可读取data/data目录下的文件
public void execMethod(){                   String line ="";                   String args[] = new String[3];                   args[0] = "chmod";                   args[1] = "777";                                      args[2] ="/data/data/com.eoemobile/databases/webviewCache.db";                              try                   {                    Process process = Runtime.getRuntime().exec(args);                                //get the err line                    InputStream stderr = process.getErrorStream();                    InputStreamReader isrerr = new InputStreamReader(stderr);                    BufferedReader brerr = new BufferedReader(isrerr);                    //get the output line                      InputStream outs = process.getInputStream();                    InputStreamReader isrout = new InputStreamReader(outs);                    BufferedReader brout = new BufferedReader(isrout);                    String errline = null;                    String result = "";                                        // get the whole error message string  while ( (line = brerr.readLine()) != null)                    {                     result += line;                     result += "\n";                    }                     if( result != "" )                    {                     // put the result string on the screen                    }                    // get the whole standard output string                    while ( (line = brout.readLine()) != null)                    {                     result += line;                     result += "\n";                    }                    if( result != "" )                    {                     System.out.println(result);                    }                   }catch(Throwable t)                   {                    t.printStackTrace();                   }           }


原创粉丝点击