2014-03-26 89 views
1

我試圖下載我的sqlite數據庫,以便我可以查看它的內容(我們的應用程序在線脫機同步,並且我試圖確保它只是從API下拉它應該是什麼)。如何從我的Android應用程序無ROOT下載我的sqlite數據庫?

我正在嘗試使用adb pull /data/data/com.mycompany.myapp/files/db.sqlite3但我不斷收到權限被拒絕。

我已經嘗試通過shell登錄並將其複製到SD卡,但我也有拒絕的權限(並且我不想在我的清單中添加SDCard訪問權限)。

$ adb shell 
$ run-as com.mycompany.myapp 
$ cd files 
$ cp db.sqlite3 /mnt/sdcard/db.sqlite3 
$ PERMISSION DENIED 

沒有root權限,如何從我的Android設備下載我的SQLite文件,讓我訪問的位置?

+0

的[機器人ADB,檢索使用運行作爲數據庫(http://stackoverflow.com/questions/18471780/android-adb-retrieve-database-using-run-as) –

回答

3

下載是(如你所見)相當棘手,但並非不可能。

下面是抓取文件並將其移動到本地機器的步驟。
注意:我在Windows上,但只要知道本地路徑,就可以在其他設備上完成此操作。

$ adb shell       // enter into shell 
$ run-as [com.mycompany.myapp]  // log in as your app 
$ cd [files]      // navigate to the path of the file you need access to. 
$ chmod 0644 [db.sqlite3]   // DANGEROUS: change the permissions of said file allow you access via adb pull 
$ {ctrc} + {c}      // Exit Shell 
$ adb pull [/data/data/com.mycompany.myapp/files/db.sqlite3] [c:\db.sqlite3] // pull the file to your local machine. 

從那裏,你可以瀏覽到你的輸出目錄和訪問文件。

什麼[方括號]是一個變量,你將用你自己的變量填寫。
note{ctrl} + {c}是在Windows的PowerShell中,其他平臺可以不同。

我也創建了一個簡單的Powershell腳本,它自動執行此操作。

$appName = 'com.mycompany.myapp' 
$dbName = 'db' 

adb shell "run-as $appName chmod 644 /data/data/$appName/files/$dbName" 
adb pull "/data/data/$appName/files/$dbName" "./$dbName.sqlite3" 
Invoke-Item ".\$dbName.sqlite3" 
+1

別可能重複t使用0777.最多使用0644. –

+1

@ChrisStratton已更改。 –

相關問題