2012-06-28 82 views
3

我是一个植根于设备上工作的数据库。 我已经连接到我的电脑的adb外壳,我可以验证其他数据库存在,我可以查询它的表。如何读取其他应用程序

然而,在我的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

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

+0

你能给你的环境,例如更多细节操作系统等。您正在使用的语言以及您希望访问的数据库类型? – Deepend

+0

@Deepend这显然是Android和Java。检查标签。 –

回答

9

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

1)你需要有两个应用程序安装在使用相同user id。这种添加到这两个体现:

android:sharedUserId="com.xx.xx" 

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

+0

谢谢你@Caner我所做的就是下载从商店名为root浏览器的应用程序,并复制.apk文件到/系统/应用程序,然后我重新启动,应用程序确实安装,但结果是一样的反应。我再次检查,看看数据库路径是否相同。我正在使用Cyanogenmod的HTC Desire HD。同样通过根浏览器应用程序,我将所有权限授予了/ system/app文件夹中的apk。 –

+0

打开外壳,并做'su',然后尝试'CHOWN root.root /系统/应用/ your.apk' – Caner

+0

不幸的是这没有帮助,根浏览器应用程序正确地显示,APK的所有者是root,但这不会改变任何东西。有趣的是,一旦我将.apk复制到/ system/app文件夹,应用程序将自动安装而不需要重新启动(尽管我也尝试重新启动设备)。下面是堆栈跟踪其是有趣的几行:源码返回:错误代码= 14,味精=不能在[42537b6056] sqlite3_open_v2(“/数据/数据/ com.facebook.katana /数据库/ FB 27205线打开的文件。 DB”,与处理,1,NULL)失败 –

1

我会假设,对数据库文件的权限设置,使得你的应用程序没有接取。即使您的设备是根植的,但并不意味着您的应用程序以root身份运行。

+0

谢谢@David Wasser,但如果我在.apk上使用chown,这不会使应用程序以root身份运行吗?如果它以root身份运行,那么我仍然有可能无法访问数据库? –

+0

好问题。我根本不用扎根手机玩很多,所以我想我在这里帮不了你。抱歉。你应该能够通过使用'adb shell'和一个'ps'命令来看看你的应用程序是否以超级用户身份运行,该命令会显示每个进程运行的用户ID。 –

1

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

这并不规避Android的安全性,因此在您自担风险。你可以找到一个代码示例:

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

相关问题