Android模拟器在哪里存储SQLite数据库?


108

我正在使用将数据存储在SQLite数据库中的Android应用程序。我的问题是,当您使用仿真器时,此数据库文件将存储在文件系统上的什么位置?

我已经看到它存储在

/data/data/package_name/databases

但我需要知道本地计算机的硬盘上实际映射到的位置。即使关闭了计算机,数据库也可以在模拟器的多次运行中保留,因此它不能仅驻留在RAM中。

Answers:


55

仿真器的文件系统未映射到硬盘驱动器上的目录。仿真器的磁盘映像存储为映像文件,您可以通过Eclipse(在工具栏中查找外观为G1的图标)或仿真器二进制文件本身(运行“ emulator -help”以获取选项说明)进行管理。 。

最好从命令行使用adb插入正在运行的仿真器。如果可以获得特定的目录和文件名,则可以执行“ adb拉取”操作,将数据库文件从仿真器中取出并放到常规硬盘上。

编辑:删除了建议,该建议也适用于无根设备-仅适用于仿真器以及您以root用户身份运行adb的设备。


6
我通过Eclipse的ddms获得了DB。进行了更改,然后将其推迟。像魅力一样工作。
I822009年

@ I82对我也很有效,将eclipse透视图更改为ddms,然后可以获取其中的数据文件。谢谢。
vanzylv 2011年

2013更新:在Jelly Bean设备上,如果您不是root用户,则无法adb pull(即使具有正确的路径!)。
Bill The Ape

这不是更新,基本上从一开始,应用程序的私有文件就从安全设备上的adb私有了。但是这个问题是关于仿真器的,在该仿真器中adb以root身份运行。
克里斯·斯特拉顿

6
将数据库从仿真器拉到本地计算机的示例是adb pull /data/data/com.activeandroid.test/databases/Application.db ~/Development/Application.db
Joshua Pinter 2014年

123

以下评论中提到的更新:

您不再需要使用DDMS透视图,只需从Eclipse 窗口>显示视图>其他打开文件资源管理器,似乎该应用程序甚至不需要运行,我可以在不同的应用程序文件中浏览内容。我正在运行ADB版本1.0.29


或者,您可以尝试旧方法:

在Eclipse IDE上打开DDMS透视图

窗口>打开透视图>其他> DDMS

最重要的是:

您的应用程序必须正在运行,这样您才能看到文件夹和文件的层次结构

然后在“ 文件资源管理器”选项卡中,您将遵循以下路径:

数据>数据>您的软件包名称>数据库>您的数据库文件

然后选择文件,单击屏幕右上角的磁盘图标以下载.db文件。如果要将数据库文件上传到仿真器,则可以单击电话图标(在软盘图标旁边),然后选择要上传的文件。

如果您想查看.db文件的内容,建议您使用SQLite数据库浏览器,您可以在此处下载。

PS:如果您想从真实设备上查看数据库,则必须为手机加电。


5
如果有人想知道,您必须单击“文件资源管理器”标签。
MSpeed 2010年

嗨,cyberrog,我找到了数据库文件,但是你能告诉我如何打开这个文件吗?或如何查看其内容?
2011年

4
@NileshNikumbh选择文件,然后单击软盘图标,然后选择要存储的位置。您还需要下载SQLite浏览器。sourceforge.net/projects/sqlitebrowser安装后,只需打开.db文件,选择“浏览数据”选项卡,然后选择要查看的列。
rogcg 2011年

很棒的帖子!我在从仿真器设备获取sqlite文件时遇到问题:Failed to pull selection (null)
Jan-TerjeSørensen2012年

@OckhamsRazor如果您想从真实设备(而不是仿真器)查看数据库,则必须为手机建立根目录。
rogcg 2012年

18

其他答案已严重过时。使用Android Studio时,这是这样做的方法:

  1. 单击工具> Android> Android设备监视器

在此处输入图片说明

  1. 点击文件浏览器

在此处输入图片说明

  1. 导航到您的数据库文件,然后单击“ 保存”按钮。

在此处输入图片说明


1
“ Android设备监视器已从Android Studio 3.1中弃用,并已从Android Studio 3.2中删除。您可以通过Android设备监视器使用的功能已被新功能取代...” developer.android.com/studio/profile/monitor
皮特·阿尔文,

8

在Android Studio 3.4.1中,您可以使用Android Studio的搜索功能找到“设备文件资源管理器”,然后转到模拟器的/ data / data / package_name / database目录。


6

我编写了一个简单的bash脚本,该脚本将数据库从android设备拉到您的计算机(Linux,Mac用户)

filename: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

6

由于问题不仅限于Android Studio,所以我给出了Visual Studio 2015(适用于Xamarin)的路径。

工具-Android-Android设备监控器

在此处输入图片说明

  • 找到上图提到的数据库文件,然后单击“拉”按钮,如图2所示。
  • 将文件保存在所需的位置。
  • 您可以使用SQLite Studio或用于SQLite的数据库浏览器打开该文件。

特别感谢这个问题的其他回答者。


4

数据库作为SQLite文件存储在/ data / data / PACKAGE / databases / DATABASEFILE中,其中:

您可以在仿真器中选择DDMS透视图,在File Explorer选项卡中查看(从/复制到文件系统)数据库文件。


3

简单的解决方案-适用于仿真器和连接的设备

1 请参阅当前可用的设备/仿真器列表。

$ adb devices

连接的设备列表

G7NZCJ015313309设备仿真器-5554设备

9885b6454e46383744设备

2 在设备/仿真器上运行备份

$ adb -s emulator-5554 backup -f ~/Desktop/data.ab -noapk com.your_app_package.app;

3 提取数据

$ dd if=data.ab bs=1 skip=24 | openssl zlib -d | tar -xvf -;

您将在/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 -
Lasse Magnussen

对我不起作用。我要bash: adb: command not found
马提亚

0

根据Android文档,Monitor已在Android Studio 3.1中弃用,并已从Android Studio 3.2中删除。要访问文件,Android Studio在开发窗口的右下角有一个名为“设备文件资源管理器”的标签,您可以访问模拟器文件系统。只要跟随

/ data / data / package_name / databases

祝好运。

Android设备文件浏览器


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.