我需要从我的应用程序中读取另一个应用程序的sqlite数据库。我知道默认情况下这在Android应用程序中是不可能的,但是因为设备是root的,我想我应该能够为我的应用程序提供root访问权限并抓住其他应用程序的数据库并阅读它。
我不希望设备用户收到通知并授予我SUPER_ACCESS
权限,因此这应该是一个匿名过程。另一个App已经实现了ContentProvider并设置了exported = true
这是我到目前为止所尝试过的,但它仍然抛出一个异常,它无法打开数据库文件。
try {
File dbFile = new File("/data/data/com.sam.sample/databases/sample.db");
if(dbFile.exists()) {
String [] cmd = {"su", "-c", "chmod", "777", file.getPath()};
Process process = new ProcessBuilder(cmd).start();
process.waitFor();
SQLiteDatabase db = SQLiteDatabase.openDatabase(dbFile.getPath(), null, SQLiteDatabase.OPEN_READONLY);
Cursor cursor = db.rawQuery("SELECT * FROM sample", null);
if (cursor.moveToFirst()) {
while (!cursor.isAfterLast()) {
String name = cursor.getString(cursor.getColumnIndex("name"));
Log.v("FROM DATABASE", name);
cursor.moveToNext();
}
}
}
cursor.close();
db.close();
}
}
catch(IOException e) {
...
}
我在这里做错了什么或者我应该做些什么?