3

我正在使用有根设备。我已经从我的电脑连接了 adb shell,我可以验证另一个数据库是否存在,我可以查询它的表。

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

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

我正在尝试像这样打开数据库:

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

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

我应该像这样读取其他应用程序的数据库还是有其他方法?

更新:我还尝试按照此线程中的建议制作系统应用程序将我的 apk 推送到 /system/app

我认为它可以工作,因为该应用程序无法像普通应用程序那样从应用程序管理器中卸载,所以我认为它是一个系统应用程序。但是我仍然无法访问数据库,尽管我确定路径和权限都可以。

4

3 回答 3

9

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

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

android:sharedUserId="com.xx.xx"

2) 如果其他应用程序是第 3 方应用程序,那么您唯一的选择是将您的应用程序安装为系统应用程序。为此,您需要一部有根电话,并且需要挂载该文system​​件夹。然后您需要将您的应用程序放入/system/app/文件夹并重新启动手机。它应该在引导过程中自动安装。

于 2012-06-28T12:09:10.040 回答
1

我会假设数据库文件的权限设置为使您的应用程序无法访问。即使您的设备已植根,但这并不意味着您的应用程序以 root 身份运行。

于 2012-06-28T12:09:01.197 回答
1

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

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

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

于 2013-04-05T12:07:56.280 回答