最近做东西,先是在模拟器上进行数据库的测试,读写操作,发现没问题了之后开始进行真机的测试。但是,为了在测试的时候能查看数据库的变化,确保程序的值都正确的写入了数据库。就通过adb shell连接手机进行查看。但是发现和模拟器不同,有各种各样的问题,不过总结下来一句话就是---权限不够。
现将问题总结如下,并给出我的一些解决办法,都是一些笨方法。比较粗暴。
问题一: sh: sqlite3 command not found.
adb shell进入程序目录后通过 sqlite3 "databases name",后提示这个,是因为/system/xbin/下没有sqlite3 文件的命令执行文件。解决的方法就是拷贝一个进去。网上关于这方面的东西也很多。但是也有很多人说不好使。原因在于sqlite3也是有很多版本的,个人推荐的方法是先弄清楚自己的真机的Android版本。在AVD中新建一个版本一样的模拟器,然后将模拟器中/system/xbin/sqlite3 拉出来,放进真机中。
问题二: permission denied
接着上面的步骤我们发现,文件放进去了,但是文件的属性是读写,没有执行权限。所以解决办法就是给它执行的的权限。简单粗暴一点的方法就是 chmod 777.简单又粗暴。其实在上面或者这里我们都会发现一个问题,当我们以adb shell 去操作真机时,会发现,由于手机的系统都是read only,所以上面和我们接下来的大部分操作都会被拒绝或者提醒权限不够,这时我们需要暂时的把文件系统改为可写的(我对linux并不是很熟悉,这是在网上搜集的解决方法)。
mount -o remount,rw -t yaffs2 /system/xbin
问题三: CANNOT LINK EXECUTABLE
修改完sqlite3文件的可执行权限后,还是执行失败,是因为少了libncurses.so库文件,上网上down下来然后拉进/system/lib下。
问题四: Error: unable to open database "****": unable to open database file
做完上面的东西,已经折腾了半天,实在是很无语。本以为快要解决的时候。突然又出现了这个问题。这个问题让我有点摸不着头脑,因为百度了一下发现,这依然是权限问题。但是我不懂的是作为一个数据库文件,有了读写的权限为什么还是不能被sqlite3加载。在我尝试给数据库赋上执行权限时,就能够打开了个人感觉一个文件不需要执行,只需要被另一个程序打开时是不需要执行权限的。还望大家看到后告知我一声。虽然解决了但是依然莫名其妙。
在解决了上述的问题后就能够通过adb shell 调试真机的数据库了。网上也有一些这方面的帖子,此篇文章只是作为补充说明和个人碰到问题集合。