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

我正在开发一个在 SQLite 数据库中存储数据的 Android 应用程序。我的问题是,当您使用模拟器时,这个数据库文件存储在文件系统的哪里?

我看到它被储存在

/data/data/package_name/databases

但我需要知道我本地机器的硬盘上的地图到底指向哪里。数据库在模拟器的多次运行中仍然存在,甚至在关闭机器之后也是如此,因此它不能仅仅驻留在 RAM 中..。

131561 次浏览

模拟器的文件系统不会映射到硬盘上的目录。模拟器的磁盘映像存储为一个映像文件,您可以通过 Eclipse (在工具栏中查找 G1图标)或模拟器二进制文件本身(运行“模拟器-帮助”以获得选项描述)来管理这个映像文件。

您最好从命令行使用 adb 插入正在运行的模拟器。如果您可以获得特定的目录和文件名,那么您可以执行“ adb pull”操作,将数据库文件从模拟器中取出,放到常规的硬盘驱动器上。

编辑 : 删除了这种方法也适用于非根设备的建议——它只适用于模拟器和将 adb 作为 root 操作的设备。

以下评论中提到的最新情况:

你不需要在 DDMS 透视图了,只需要从 Eclipse 窗口 > 显示视图 > 其他..。打开文件浏览器。看起来这个应用程序不需要运行,我可以浏览不同的应用程序文件内容。我是 运行 ADB 版本1.0.29


或者,你可以试试老办法:

在 Eclipse IDE 上打开 DDMS 透视图

(窗口 > 开放透视图 > 其他 > 数码地图管理系统)

也是最重要的:

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

Then in the 文件浏览器标签 you will follow the path :

Data > data > your-package-name > database > your-database-file .

然后选择文件,点击屏幕右角的 磁盘图标下载 。 db文件。如果你想上传一个数据库文件到模拟器,你可以点击 电话图标(磁盘图标旁边)并选择要上传的文件。

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

附言: 如果你想从真正的设备上看到数据库,你必须根你的手机。

数据库以 SQLite 文件的形式存储在 /data/data/PACKAGE/database/DATABASEFILE中,其中:

  • PACKAGE is the package declared in the AndroidManifest.xml (tag "manifest", attribute "package")
  • DATABASEFILE 是在调用 SQLiteOpenHelper 构造函数时传递的名称,如下所示: < a href = “ http://developer.android.com/guide/questions/data-storage.html # db”rel = “ nofollow”> http://developer.android.com/guide/topics/data/data-storage.html#db

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

我编写了一个简单的 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

其他的答案已经严重过时了。对于 安卓工作室,这是解决问题的方法:

  1. 点击 工具 > Android > Android 设备监察器

enter image description here

  1. 点击 文件资源管理器

enter image description here

  1. 导航到数据库文件并单击 保存按钮。

enter image description here

Since the question is not restricted to Android Studio, So I am giving the path for Visual Studio 2015 (worked for Xamarin).

Tools-Android-Android Device Monitor

enter image description here

  • 找到上面图片中提到的数据库文件,点击图片2中显示的“拉”按钮。
  • 将文件保存到所需的位置。
  • 您可以使用 SQLiteStudio 或 SQLite 的 DB 浏览器打开该文件。

Special Thanks to other answerers of this question.

Simple Solution - works for both Emulator & Connected Devices

参见当前可用的设备/模拟器列表。

$ adb devices

附件设备清单

G7NZCJ015313309设备模拟器 -5554设备

9885b6454e46383744设备

在设备/模拟器上运行备份

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

3 Extract data.ab

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

您将在 /db文件夹中找到数据库

在 Android Studio 3.4.1中,您可以使用 Android Studio 的搜索功能来查找“ Device File Explorer”,然后进入模拟器的/data/data/package _ name/database 目录。

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

/data/data/package _ name/database

good luck.

Android device File explorer

For Android Studio 3.5, fount it using instructions here: https://developer.android.com/studio/debug/device-file-explorer (查看-> 工具 Windows-> 设备文件资源管理器->-> 数据库