Android 模拟器 sqlite3命令 not found 解决办法
1. 环境
Android Studio
Android 模拟器 网易MuMu (Android 6.0.1)
2. 概述
Android Studio自带的虚拟机感觉运行效果有点卡顿,所以下载MuMu作为Android调试的模拟器。
但是MuMu中缺少一些命令,比如所需的sqlite3。
通过PC的cmd命令端或Power Shell利用adb shell进入MuMu模拟器,并获取root权限。
cd到对应APP的databases目录下,发现sqlite3 not found。
这说明MuMu模拟器/system/xbin/下没有sqlite3这个命令。
笔者因为急需查看这个数据库下面的表,所以采取一种临时方法查看。
3. 临时解决方法
原理:急需查看数据库中的表,所以通过adb pull 的方法,将数据库复制到PC上,然后使用sqlite3查看。
命令如下:
//进入模拟器,已经获取root权限
adb shell
//进入你的database的目录下
cd /data/data/<your-app>/databases/
//将所需查看的数据库复制到/sdcard/的某个目录下,这样下一步输入路径会方便一点
cp <your-database-name.db> /sdcard/DCIM/
//回到PC控制用户
exit
//把数据库拿出来
adb pull sdcard/DCIM/<your-database-name.db>
//查看数据库
sqlite3 <your-database-name.db>
//看完后删除
rm <your-database-name.db>
4. 通用解决方法
原理:从Android Studio的虚拟机中,将对应CPU版本的sqlite3这个command复制到MuMu模拟器/system/xbin/目录下面。
具体步骤:
创建与MuMu模拟器相同CPU版本的avd虚拟机(直接在Android Studio创建即可)
Tools —— AVD Manager —— Create Vitual Device
第一步、选屏幕界面,自己随意即可,点击NEXT
第二步、要选择相应的Android API版本 和 对应的CPU架构。
根据自己MuMu虚拟机的版本就可以了。笔者的是Android 6.0,CPU型号是X86。
注意:
因为MuMu模拟器是在PC上运行的,所以它的CPU架构并不是Arm(你用命令行查看CPU型号时,会显示模拟器为ARM的CPU,但那真的只是模拟而已……),故不能选择Arm系列的AVD虚拟机。你也可以尝试一下,这台虚拟机无法在你的PC上开机,会一直卡在"waiting your device to come online
"这个process。下图显示笔者的MuMu模拟器实际运行的是X86的CPU。
所以对因选择X86版本的Android 6.0 来配置自己的Android Studio AVD虚拟机。
第三步、可以给自己虚拟机改个名字,然后点击Finish即可。
从Android Studio AVD的虚拟机中,获取sqlite3命令,并传到MuMu中去。
第一步、开启虚拟机。左边是AVD,右边是MuMu模拟器。
//显示当前连接的可用adb操作设备.
//在这里MuMu模拟器是127.0.0.1:7555这个设备,AVD虚拟机是emulator-5554这个设备
adb devices
//进入Android Studio AVD虚拟机
adb -s emulator-5554 shell
//进入/system/xbin目录下,查看是否有sqlite3
cd /system/xbin
ls -a | grep sqlite3
//有sqlite3,退回到windows系统
exit
//将sqlite3复制到windows下面
adb -s emulator-5554 pull /system/xbin/sqlite3
第二步,将sqlite3传到MuMu模拟器中去。
//进入MuMu模拟器,确保是root#用户
adb -s 127.0.0.1:7555 shell
//给/system赋予可读可写权限
mount -o remount,rw /system
//退回到windows系统
exit
//将sqlite3复制到/system/xbin目录下面
adb -s 127.0.0.1:7555 push sqlite3 /system/xbin/
//重新进入MuMu模拟器,确保是root#用户
adb -s 127.0.0.1:7555 shell
// 给sqlite3命令可执行权限
chmod 755 /system/xbin/sqlite3
//重现将/system目录变为只读
mount -o remount,ro /system
完成,可以自己到自己的数据库目录下,测试sqlite3命令是否好用。