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这个命令。

RTOS 模拟sqlite功能_sqlite


笔者因为急需查看这个数据库下面的表,所以采取一种临时方法查看。

RTOS 模拟sqlite功能_Android_02

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。

RTOS 模拟sqlite功能_Android_03


所以对因选择X86版本的Android 6.0 来配置自己的Android Studio AVD虚拟机。

RTOS 模拟sqlite功能_Android_04


第三步、可以给自己虚拟机改个名字,然后点击Finish即可。从Android Studio AVD的虚拟机中,获取sqlite3命令,并传到MuMu中去。

第一步、开启虚拟机。左边是AVD,右边是MuMu模拟器。

RTOS 模拟sqlite功能_RTOS 模拟sqlite功能_05

//显示当前连接的可用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

RTOS 模拟sqlite功能_RTOS 模拟sqlite功能_06

第二步,将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命令是否好用。

RTOS 模拟sqlite功能_RTOS 模拟sqlite功能_07