2010-11-09 45 views
0

sqlite的分贝当调试模拟器上我的Android应用程序,我可以连接到它与亚行外壳和查看与sqlite3的命令我的数据库文件。但在真实的设备上,我不能这样做,因为我没有root权限。有什么办法可以做到这一点?观看设备

回答

0

如果您正在使用Eclipse的尝试了这一点:questoidsqlitemanager

+0

我不使用偏食 – Dmitriy 2010-11-09 12:05:18

+0

,只有拥有模拟器工作。 OP想要从实际设备读取数据库的方式。 – 2010-11-09 13:17:27

+0

项目删除? – max4ever 2011-12-16 14:22:03

0

你的数据库文件必须在/数据/数据/ YOUR_PACKAGE_NAME /数据库,试试这个:

adb shell (Use "-s" option if you have more than one device) 
sqlite3 /data/data/YOUR_PACKAGE_NAME/databases/YOUR_DATABASE_NAME 

移动YOUR_DATABASE_NAME到/ data文件夹改变权限(CHMOD 777 YOUR_DATABASE_NAME)。现在你将能够获得文件。现在你可以使用sqlite3或SQLite Manager插件。

您可以超级用户身份登录。

+0

,而不是设备(拒绝) – Dmitriy 2010-11-09 15:53:06

+0

该目录只会给应用程序的用户ID和超级用户访问上。在仿真器上,adb外壳是后者,在真实设备上它不是。 – 2010-11-09 16:07:36

+0

我再编辑一个步骤以root(无闪存)并获取数据库文件。希望他帮忙 – Fraid 2010-11-09 16:23:32

0

这是一个操作系统级别的权限问题,因此您必须将数据库移动到具有更轻松权限的位置(不确定api是否允许您将其放在SD卡上,但底层库应该)。

否则,你可以做一些从数据库监控是有权读取存在,这是说一些以root身份运行或更有可能的应用_ ##安装在应用程序创建的用户ID。例如 - 除了在设备上进行测试之外,这不是您应该做的事情 - 您可以制作工具箱外壳的副本,以便编写和执行(如/ sqlite_stmt_journals目录),并将其设置为您的应用程序的用户标识(您的应用程序本身必须以编程方式执行复制和chmod程序)。然后,您可以从adb shell运行该shell并成为应用程序的用户标识。

或者应用程序以编程方式启动的任何进程都会拥有它的用户标识,因此您还可以在运行netcat(“nc”,我想即使打包在官方的android版本中)中读取它的mini-insecure-telnet-守护进程模式,并从您的应用程序启动,以便如果您使用adb shell或adb端口转发连接到侦听的端口,您将获得一个作为应用程序用户标识运行的shell。

或者你可以建立数据库的探索功能集成到你的应用程序,无论是监听TCP或使用文件守望者作为触发和倾倒的SD卡,你可以检查上的文件。

或者你可以根植你的手机。