2009-10-02 63 views
100

我正在研究一個將數據存儲在SQLite數據庫中的Android應用程序。我的問題是,當你使用模擬器時,這個數據庫文件在哪裏存儲在文件系統中?Android模擬器在哪裏存儲SQLite數據庫?

我已經看到,它存儲在

/data/data/package_name/databases

,但我需要知道我的本地計算機的硬盤上,實際上映射到。數據庫在模擬器的多次運行中仍然存在,即使關閉了機器後也是如此,所以它不能只駐留在RAM中...

回答

53

模擬器的文件系統沒有映射到硬盤上的目錄。模擬器的磁盤映像存儲爲映像文件,您可以通過Eclipse(在工具欄中查找G1外觀圖標)或通過仿真器二進制文件本身進行管理(有關選項的說明,請運行「emulator -help」) 。

您最好使用命令行中的adb插入正在運行的模擬器。如果您可以獲取特定的目錄和文件名,則可以執行「adb pull」以將數據庫文件從仿真器中取出並放到普通硬盤上。

編輯:刪除建議,這也適用於無根設備 - 它只適用於模擬器,以及您在以root操作adb的設備。

+6

我得到的DB關閉。做了我的改變,然後推回去。像魅力一樣工作。 – I82Much 2009-10-15 17:23:46

+0

@ I82Much也爲我工作,將日食視角更改爲ddms,然後您可以獲取那裏的數據文件。謝謝。 – vanzylv 2011-12-29 09:54:26

+0

2013更新:在Jelly Bean設備上,如果您不是** root **,那麼您不能'adb pull'(即使是* exact *路徑!)。 – 2013-07-02 07:54:05

120

請參閱此link或按照下面的答案。


在下面的評論中提到的更新:

你不需要是在DDMS角度來看了,剛剛從Eclipse中打開文件資源管理器窗口>顯示視圖>其他...似乎應用程序並不需要運行,我可以瀏覽不同的應用程序文件內容。我 運行ADB版本1.0.29


或者,你可以嘗試老辦法:

打開DDMS角度對您的Eclipse IDE

窗口> Open Perspective>其他> DDMS

和最重要的:

您的應用程序必須運行,因此您可以查看文件夾和文件的級別

然後在文件瀏覽器選項卡你會遵循的路徑:

數據>數據>您的包名>數據庫>你的數據庫文件

然後選擇文件,在屏幕的右上角點擊圖標分散片對下載.db的文件。如果要將數據庫文件上載到模擬器,您可以單擊電話圖標(位於磁盤圖標旁)並選擇要上載的文件。

如果您想查看.db文件的內容,我建議您使用SQLite數據庫瀏覽器,您可以下載here

PS:如果您想從真實設備中查看數據庫,則必須對您的手機進行根目錄。

+5

如果有人想知道,你必須點擊'文件資源管理器'選項卡。 – 2010-12-13 11:03:20

+0

嗨cyberrog,我發現數據庫文件,但你能告訴我如何打開這個文件?或如何查看它的內容? – 2011-06-20 08:10:58

+4

@NileshNikumbh選擇文件,然後單擊光盤圖標並選擇要存儲的位置。您還需要下載SQLite瀏覽器。 http://sourceforge.net/projects/sqlitebrowser/安裝後,只需打開.db文件,選擇「瀏覽數據」選項卡和要查看的列。 – rogcg 2011-06-20 12:15:38

4

的數據庫被存儲爲在/數據/數據/包裝/數據庫SQLite的文件/ DATABASEFILE其中:

您可以在文件瀏覽器選項卡中看到(從文件系統複製到)文件系統中的數據庫文件,選擇DDMS透視圖

6

我寫了一個簡單的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 
13

其他答案嚴重過時。隨着Android Studio中,這是做它的方式:

  1. 點擊工具>安卓> Android設備監視器

enter image description here

  • 點擊文件瀏覽器
  • enter image description here

  • 導航到你的數據庫文件,然後點擊保存按鈕
  • enter image description here

    5

    由於該問題不侷限於Android的工作室,所以我給的Visual Studio 2015年的路徑(工作了Xamarin)。

    Tools-Android-Android Device Monitor

    enter image description here

    • 定位在上圖中提到的數據庫文件,並在圖像2.
    • 保存在您想要的位置的文件表明,它在拉按鈕點擊。
    • 您可以使用SQLite Studio或DB Browser for SQLite打開該文件。

    特別感謝此問題的其他答案者。

    2

    簡單的解決方案 - 適用於這兩種模擬器&連接的設備

    查看當前可用的設備/仿真器的列表。設備的

    $ 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

    +0

    如果你在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

    相關問題