2012-06-28 150 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

相關問題