【问题标题】:What is proper way of pulling the database from my android application? [duplicate]从我的 android 应用程序中提取数据库的正确方法是什么? [复制]
【发布时间】:2016-10-08 06:08:39
【问题描述】:

我一直在尝试从我的索尼 xperia android 设备(操作系统:JellyBean 4.1.2)中提取 sqlite 数据库,在某些情况下我查看了不同的 stackoverflow 线程,但我遇到了错误 "run-as: Package 'com.myapp' is unknown", 在某些情况下,mydata.db 文件会显示在我的计算机目录中,但大小为零。有什么正确的方法可以拉出数据库吗?谷歌有没有为此目的的指南? 注意我已经访问了以下线程: android adb, retrieve database using run-as

【问题讨论】:

  • 如果设备未植根于您的设备操作系统,则无法提取数据库,我的建议是将数据库复制到您的 sdcard (stackoverflow.com/questions/14957835/…) 如果它是您的代码。
  • 查看我对重复问题的回答。如果应该是做你想做的最简单的方法。

标签: java android sqlite


【解决方案1】:

我找到了解决办法。

首先运行这个命令

adb backup -f ~/data.ab -noapk app.package.name[![enter image description here][1]][1]

只需点击“备份我的数据”按钮。屏幕将显示您正在备份的包的名称,然后在成功完成后自行关闭。

生成的“.ab”文件包含 android 备份格式的应用程序数据。

快速提取一个简单的非加密备份运行:

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

可能并非所有的 openssl 安装都使用 zlib 支持进行编译。这是另一种使用 python 来实现相同结果的单线:

dd if=data.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" | tar -xvf -

结果是包含应用程序数据的 apps/app.package.name/ 文件夹。

注意:如果应用程序开发人员通过在应用程序清单中设置 android:allowBackup="false" 明确禁用备份其应用程序的功能,则此方法不起作用。

查看此链接:http://blog.shvetsov.com/2013/02/access-android-app-data-without-root.html

【讨论】:

    【解决方案2】:

    如果我理解正确,您可以使用adb pull <path-to-db-on-phone> <path-on-your-pc>。如果您遇到任何权限错误:请执行adb remount,然后再次尝试上述命令。

    【讨论】:

    • 没用,我试过这个得到“拉:构建文件列表......拉了0个文件。跳过了0个文件。”
    • adb pull 命令给出权限被拒绝错误然后 adb remount 给出操作不允许,你知道为什么会这样吗?
    • @HarshShah :可能存在权限问题。看到这个:stackoverflow.com/questions/2078710/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    相关资源
    最近更新 更多