我正在研究一個將數據存儲在SQLite數據庫中的Android應用程序。我的問題是,當你使用模擬器時,這個數據庫文件在哪裏存儲在文件系統中?Android模擬器在哪裏存儲SQLite數據庫?
我已經看到,它存儲在
/data/data/package_name/databases
,但我需要知道我的本地計算機的硬盤上,實際上映射到。數據庫在模擬器的多次運行中仍然存在,即使關閉了機器後也是如此,所以它不能只駐留在RAM中...
我正在研究一個將數據存儲在SQLite數據庫中的Android應用程序。我的問題是,當你使用模擬器時,這個數據庫文件在哪裏存儲在文件系統中?Android模擬器在哪裏存儲SQLite數據庫?
我已經看到,它存儲在
/data/data/package_name/databases
,但我需要知道我的本地計算機的硬盤上,實際上映射到。數據庫在模擬器的多次運行中仍然存在,即使關閉了機器後也是如此,所以它不能只駐留在RAM中...
模擬器的文件系統沒有映射到硬盤上的目錄。模擬器的磁盤映像存儲爲映像文件,您可以通過Eclipse(在工具欄中查找G1外觀圖標)或通過仿真器二進制文件本身進行管理(有關選項的說明,請運行「emulator -help」) 。
您最好使用命令行中的adb插入正在運行的模擬器。如果您可以獲取特定的目錄和文件名,則可以執行「adb pull」以將數據庫文件從仿真器中取出並放到普通硬盤上。
編輯:刪除建議,這也適用於無根設備 - 它只適用於模擬器,以及您在以root操作adb的設備。
請參閱此link或按照下面的答案。
在下面的評論中提到的更新:
你不需要是在DDMS角度來看了,剛剛從Eclipse中打開文件資源管理器窗口>顯示視圖>其他...似乎應用程序並不需要運行,我可以瀏覽不同的應用程序文件內容。我 運行ADB版本1.0.29
或者,你可以嘗試老辦法:
打開DDMS角度對您的Eclipse IDE
(窗口> Open Perspective>其他> DDMS)
和最重要的:
您的應用程序必須運行,因此您可以查看文件夾和文件的級別。
然後在文件瀏覽器選項卡你會遵循的路徑:
數據>數據>您的包名>數據庫>你的數據庫文件。
然後選擇文件,在屏幕的右上角點擊圖標分散片對下載.db的文件。如果要將數據庫文件上載到模擬器,您可以單擊電話圖標(位於磁盤圖標旁)並選擇要上載的文件。
如果您想查看.db文件的內容,我建議您使用SQLite數據庫瀏覽器,您可以下載here。
PS:如果您想從真實設備中查看數據庫,則必須對您的手機進行根目錄。
如果有人想知道,你必須點擊'文件資源管理器'選項卡。 – 2010-12-13 11:03:20
嗨cyberrog,我發現數據庫文件,但你能告訴我如何打開這個文件?或如何查看它的內容? – 2011-06-20 08:10:58
@NileshNikumbh選擇文件,然後單擊光盤圖標並選擇要存儲的位置。您還需要下載SQLite瀏覽器。 http://sourceforge.net/projects/sqlitebrowser/安裝後,只需打開.db文件,選擇「瀏覽數據」選項卡和要查看的列。 – rogcg 2011-06-20 12:15:38
的數據庫被存儲爲在/數據/數據/包裝/數據庫SQLite的文件/ DATABASEFILE其中:
您可以在文件瀏覽器選項卡中看到(從文件系統複製到)文件系統中的數據庫文件,選擇DDMS透視圖。
我寫了一個簡單的bash腳本,它是直接從Android設備數據庫到您的計算機(在Linux,Mac用戶)
文件名:android_db_move.sh 用法:android_db_move.sh com.example.app db_name.db
#!/bin/bash
REQUIRED_ARGS=2
ADB_PATH=/Users/Tadas/Library/sdk/platform-tools/adb
PULL_DIR="~/"
if [ $# -ne $REQUIRED_ARGS ]
then
echo ""
echo "Usage:"
echo "android_db_move.sh [package_name] [db_name]"
echo "eg. android_db_move.sh lt.appcamp.impuls impuls.db"
echo ""
exit 1
fi;
echo""
cmd1="$ADB_PATH -d shell 'run-as $1 cat /data/data/$1/databases/$2 > /sdcard/$2' "
cmd2="$ADB_PATH pull /sdcard/$2 $PULL_DIR"
echo $cmd1
eval $cmd1
if [ $? -eq 0 ]
then
echo ".........OK"
fi;
echo $cmd2
eval $cmd2
if [ $? -eq 0 ]
then
echo ".........OK"
fi;
exit 0
查看當前可用的設備/仿真器的列表。設備的
$ adb devices
名單附於設備/仿真器
G7NZCJ015313309設備模擬器-5554設備
9885b6454e46383744設備
運行備份
$ adb -s emulator-5554 backup -f ~/Desktop/data.ab -noapk com.your_app_package.app;
提取data.ab
$ dd if=data.ab bs=1 skip=24 | openssl zlib -d | tar -xvf -;
您將通過從Eclipse的DDMS找到數據庫文件夾/db
如果你在OS X上,你可能會錯過openssl的zlib部分。 您可以使用此變通辦法: '$ dd if = data.ab bs = 1 skip = 24 | python -c「import zlib,sys; sys.stdout.write(zlib.decompress(sys.stdin.read()))」| tar -xvf -' – 2017-06-03 21:44:57
我得到的DB關閉。做了我的改變,然後推回去。像魅力一樣工作。 – I82Much 2009-10-15 17:23:46
@ I82Much也爲我工作,將日食視角更改爲ddms,然後您可以獲取那裏的數據文件。謝謝。 – vanzylv 2011-12-29 09:54:26
2013更新:在Jelly Bean設備上,如果您不是** root **,那麼您不能'adb pull'(即使是* exact *路徑!)。 – 2013-07-02 07:54:05