如何读取另一个应用程序的数据库

时间:2012-06-28 12:02:59

标签: java android database sqlite

我正在使用root设备。 我已经从我的电脑上连接了adb shell,我可以验证其他数据库是否存在,我可以查询它的表。

但是在我的java代码中,当我尝试打开数据库时出现错误

  

android.database.sqlite.SQLiteException:无法打开数据库文件

我试图像这样打开数据库:

SQLiteDatabase.openDatabase(PATH, null, SQLiteDatabase.OPEN_READONLY);

路径类似于/data/data/com.xxx.xxx/databases/xx.db

我是否应该阅读其他类似的应用程序的数据库,还是有另一种方式?

更新: 我也尝试按照此主题Push my apk to /system/app

的建议制作系统应用程序

我认为它的工作原理是因为应用程序管理器之后无法卸载应用程序,就像普通应用程序一样,所以我认为它是一个系统应用程序。但是我仍然无法访问数据库,但我确信路径和权限都可以。

3 个答案:

答案 0 :(得分:9)

Android操作系统默认情况下不允许应用程序访问彼此的私人文件夹。为了能够读取另一个应用程序文件夹中的文件:

1)您需要使用相同的user id安装两个应用程序。将其添加到两个清单中:

android:sharedUserId="com.xx.xx"

2)如果其他应用是第三方应用,那么您唯一的选择是将您的应用安装为系统应用。要做到这一点,你需要一个root电话,你需要挂载system文件夹。然后,您需要将您的应用程序放入/system/app/文件夹并重新启动手机。它应该在启动过程中自动安装。

答案 1 :(得分:1)

我会假设设置了数据库文件的权限,使您的应用程序没有访问权限。即使您的设备已植根,也不意味着您的应用程序以root用户身份运行。

答案 2 :(得分:1)

这是因为应用程序需要root,并且需要更改您尝试访问的数据库的权限,以便您可以实际访问它。您需要做的是,以root用户身份更改数据库的权限,以便每个人都可以访问它,在数据库上执行您想要的操作,关闭数据库并更改权限。

这确实规避了android的安全性,因此请自担风险。您可以在以下位置找到代码示例:

http://rratmansky.wordpress.com/?p=259&preview=true