如何提取我的Android(Lollipop)应用程序预先填充的SQLite数据库?

时间:2017-07-20 15:07:35

标签: android database

我想提取我的Android数据库,以便我可以检查它,但我无法弄清楚如何。我知道两种常用方法(例如,adb pull和复制到SD卡)。我已成功使用"复制到SD卡"以前的方法,但这些方法中没有一个现在适合我。

我说"现在"因为我使用 this 方法使用此版本的应用程序切换到预先填充的数据库。

当我使用adb shellcd/data/data/com.myapp/databases/时,这就是我在运行ls -l时看到的内容:

drwxrwx--x    u0_a106    u0_a106    2017-07-19 11:03    cache
drwxrwx--x    u0_a106    u0_a106    2017-07-19 11:03    databases
lrwxrwxrwx    install    install    2017-07-19 11:03    lib -> /data/app-lib/com.myapp
drwxrwx--x    u0_a106    u0_a106    2017-07-19 11:03    shared_prefs

请注意,即使我在适当的数据库中也是如此。子目录,还有另一个"数据库"目录下面。

现在,当我执行此命令时:

run-as com.myapp ls -l databases

我明白这一点:

-rw-rw----    u0_a106    u0_a106    21504    2017-07-19 15:53    MYDB
-rw-------    u0_a106    u0_a106     8720    2017-07-19 15:53    MYDB-journal

我的数据库(更深层次)和#34;数据库"目录。我尝试使用adb pull命令,但Android告诉我/data/data/com.myapplicaiton/databases/MYDB does not exist

所以,我尝试了下一个级别,但仍然得到/data/data/com.myapplicaiton/databases/databases/MYDB does not exist

然后我尝试使用"复制到SD卡"方法。我得到一个数据库,但它的大小是0字节。

很奇怪,因为我显然可以看到数据库存在且大小超过0字节。

所以...发生了什么,我怎样才能获得我的数据库?

感谢。

修改

根据请求,我添加了用于提取数据库的代码:

adb shell run-as com.myapplication cat /data/data/com.myapplication/databases/MYDB > /mnt/ext_sdcard/MYDB.db

我也尝试过:

adb shell run-as com.myapplication cat /data/data/com.myapplication/databases/databases/MYDB > /mnt/ext_sdcard/MYDB.db

然后我使用adb pull /mnt/ext_sdcard/MYDB.db从平板电脑中检索它。

1 个答案:

答案 0 :(得分:0)

您可以使用命令

获取驻留在可调试应用程序的/data/data/package_name文件夹中的任何文件

adb exec-out run-as package_name cat remote_file > local_file

在你的情况下,它看起来像这样

adb exec-out run-as com.myapp cat databases/MYDB > target_file