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

修改结果:

自己写的应用如何才能获取 /data/data/com.xxx.xxx/database/xxx.db 这个文件的读取权限?
首先机子已Root,应用也获得Root权限,结果执行的时候还是报的 “ 打开数据库失败”。。。
首先机子已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命令会产生以下错误:
- 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
参考资料
如果不通过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();
}
}