【问题标题】:Where does Android emulator store SQLite database?Android 模拟器在哪里存储 SQLite 数据库?
【发布时间】:2010-12-03 09:48:12
【问题描述】:

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

我已经看到它存储在

/data/data/package_name/databases

但我需要知道我的本地计算机硬盘上实际映射到的位置。即使在关闭机器之后,数据库也会在模拟器的多次运行中持续存在,因此它不能只驻留在 RAM 中......

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    以下 cmets 中提到的更新:

    您不再需要在 DDMS 透视图中,只需从 Eclipse 打开文件资源管理器 Window > Show View > Other... 似乎不需要运行该应用程序甚至,我可以浏览不同的应用程序文件内容。我是 运行 ADB 1.0.29 版


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

    在 Eclipse IDE 上打开 DDMS 透视图

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

    最重要的是:

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

    然后在文件资源管理器标签中,您将按照路径:

    数据 > 数据 > 你的包名 > 数据库 > 你的数据库文件

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

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

    PS:如果你想在真实设备上查看数据库,你必须root你的手机。

    【讨论】:

    • 如果有人想知道,您必须单击“文件资源管理器”选项卡。
    • 嗨,cyberrog,我找到了数据库文件,但你能告诉我如何打开这个文件吗?或者如何查看它的内容?
    • @NileshNikumbh 选择文件,然后单击磁盘图标并选择要存储它的位置。您还需要下载 SQLite 浏览器。 sourceforge.net/projects/sqlitebrowser 安装后,只需打开 .db 文件,选择 Browse Data 选项卡,然后选择您要查看的列。
    • 好帖子!我在从模拟器设备获取 sqlite 文件时遇到问题:Failed to pull selection(null)
    • @OckhamsRazor 如果你想从真实设备(不是模拟器)查看数据库,你必须root你的手机。
    【解决方案2】:

    模拟器的文件系统没有映射到硬盘上的目录。模拟器的磁盘映像存储为映像文件,您可以通过 Eclipse(在工具栏中查找 G1 外观的图标)或通过模拟器二进制文件本身(运行“emulator -help”获取选项描述)来管理它.

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

    编辑:删除了这也适用于无根设备的建议 - 它仅适用于模拟器以及您以 root 身份运行 adb 的设备。

    【讨论】:

    • 我通过 Eclipse 的 ddms 关闭了数据库。做了我的改变,然后推回去。像魅力一样工作。
    • @I82Much 也对我有用,将 eclipse 透视图更改为 ddms,然后您就可以获得那里的数据文件。谢谢。
    • 2013 更新:如果您不是 root,则在 Jelly Bean 设备上,您不能 adb pull(即使使用 exact 路径!) .
    • 这不是更新,基本上从一开始,应用程序的私有文件就在安全设备上从 adb 私有。但这个问题是关于模拟器的,其中 adb 以 root 身份运行。
    • 将数据库从模拟器拉到本地机器的示例是 adb pull /data/data/com.activeandroid.test/databases/Application.db ~/Development/Application.db
    【解决方案3】:

    其他答案严重过时。使用 Android Studio,可以这样做:

    1. 点击工具> Android > Android Device Monitor

    1. 点击文件资源管理器

    1. 导航到您的 db 文件并单击 保存 按钮。

    【讨论】:

    • "Android Device Monitor 在 Android Studio 3.1 中已弃用,并从 Android Studio 3.2 中删除。您可以通过 Android Device Monitor 使用的功能已被新功能取代..." developer.android.com/studio/profile/monitor
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

        • 找到上图中提到的数据库文件,然后点击图2所示的Pull按钮。
        • 将文件保存在您想要的位置。
        • 您可以使用 SQLite Studio 或 DB Browser for SQLite 打开该文件。

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

        【讨论】:

          【解决方案7】:

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

          您可以在模拟器的“文件资源管理器”选项卡中选择DDMS 透视图,查看(从/复制到文件系统)数据库文件。

          【讨论】:

            【解决方案8】:

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

            1查看当前可用的设备/模拟器列表。

            $ adb devices
            

            附加设备列表

            G7NZCJ015313309 device emulator-5554 device

            9885b6454e46383744 设备

            2 在您的设备/模拟器上运行备份

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

            3 提取数据.ab

            $ 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 -
            • 对我不起作用。我收到bash: adb: command not found
            • 它给我的错误是 adb:无法打开文件 ~/Desktop/data.ab
            【解决方案9】:

            根据Android docs,Monitor 在 Android Studio 3.1 中已弃用,并从 Android Studio 3.2 中删除。要访问文件,在 android studio 中有一个名为“设备文件资源管理器”的选项卡,位于开发窗口的右下方,您可以访问您的模拟器文件系统。只需关注

            /data/data/package_name/数据库

            祝你好运。

            【讨论】:

              【解决方案10】:

              对于 Android Studio 3.5,请使用此处的说明找到它:https://developer.android.com/studio/debug/device-file-explorer (查看 -> 工具窗口 -> 设备文件资源管理器 -> -> 数据库

              【讨论】:

                猜你喜欢
                • 2017-11-04
                • 2012-07-30
                • 1970-01-01
                • 2016-08-03
                • 2013-09-14
                • 2012-10-17
                • 1970-01-01
                • 2010-11-09
                相关资源
                最近更新 更多