您的位置:首页 > 其它

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

2013-02-03 14:25 411 查看


如何把/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

127|shell@android:/ $ cd /data  

cd /data  

shell@android:/data $ ls  

ls  

opendir failed, Permission denied  

你是没有权限的。

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

[plain] view
plaincopy

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中,这样就可以正常访问了!

参考资料

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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: