【问题标题】:How to extract sqlite database from android device using ADB? [duplicate]如何使用 ADB 从 android 设备中提取 sqlite 数据库? [复制]
【发布时间】:2015-04-08 18:10:35
【问题描述】:

我按照How do I view the SQLite database on an Android device?的答案中给出的分步说明进行操作

1) 连接您的设备并在调试模式下启动应用程序。

2) 将数据库文件从您的应用程序文件夹复制到您的 sd 卡片。您可能想使用 adb -d shell "run-as com.resmed.mon ls /data/data/com.resmed.mon/databases/" 看看是什么数据库 文件名是。

3) adb -d shell "run-as com.yourpackge.name cat /data/data/com.yourpackge.name/databases/filename.sqlite > /sdcard/filename.sqlite"

(在我的情况下为“/data/data/com.mypackge.name/databases/MyDb”)

4) 将数据库文件拉到你的机器上:

5) adb pull /sdcard/filename.sqlite .

6) 安装 Firefox SQLLite 管理器: https://addons.mozilla.org/en-US/firefox/addon/sqlite-manager/

7) 打开 Firefox SQLLite Manager (Tools->SQLite Manager) 并打开你的 上面步骤 3 中的数据库文件。”

但就我而言,提取的数据库始终为空。当我在 SQL Lite 管理器上打开文件时,我找不到我的表和我的数据。我不明白为什么。我可以在调试模式下使用我的应用程序在设备屏幕上查看数据。是否有其他文件夹可以存储我的数据库? 我的手机没有root。

感谢您的帮助。

PS : 我想评论上一个答案,但我的声誉太低,无法与答案互动。

【问题讨论】:

  • @AlexP。 - 这似乎没有涵盖这里的情况,获取文件但发现它是空的。
  • 几个想法:一个是最近的Android版本是多用户的,每个用户可能有自己的数据目录,上面的方法可能找不到。另一个是您的应用程序可能实际上并没有提交其数据库更改 - 如果您将应用程序从最近的应用程序中滑出以杀死它,然后重新启动,它们在那里吗?最后,您的获取操作(尤其是 shell 重定向)可能会以某种方式失败,但不会产生错误输出,但会导致创建一个空文件。

标签: android database sqlite adb extraction


【解决方案1】:

我已经发布了一个用于转储数据库的简单 shell 脚本:

https://github.com/Pixplicity/dbdump

它执行这里描述的两种不同的方法:

  1. 首先,它会尝试使其他用户可以访问该文件,并尝试将其从设备中拉出。
  2. 如果失败,它将通过终端将文件内容流式传输到本地计算机。它执行了一个额外的技巧来删除某些设备输出到 shell 的 \r 字符。

从这里您可以使用各种 CLI 或 GUI SQLite 应用程序,例如 sqlite3sqlitebrowser,来浏览数据库的内容。

【讨论】:

    【解决方案2】:

    据我记得,您不应该能够从无根设备中提取数据库。但是,您可以从模拟器中获取它!

    【讨论】:

    • 引用说明中的 run-as 工具的目的特别是,当且仅当 apk 可调试时,它才允许在安全设备上执行此类操作。但是,在模拟器上进行更广泛的探索并不是一个坏主意。
    猜你喜欢
    • 1970-01-01
    • 2015-08-28
    • 2015-08-05
    • 1970-01-01
    • 2016-05-23
    • 2012-04-17
    • 1970-01-01
    • 2011-08-26
    • 2017-01-04
    相关资源
    最近更新 更多