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


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



在不root手机的情况下读取Data目录下的文件_第1张图片


修改结果:

在不root手机的情况下读取Data目录下的文件_第2张图片


自己写的应用如何才能获取 /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 plain copy
  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


如果不通过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();
                   }
           }


你可能感兴趣的:(在不root手机的情况下读取Data目录下的文件)