Android 模拟器相关基础知识

一、前言

在 Android 开发过程中会经常使用到模拟器,常用的方式是借助 Android Studio 去创建和运行模拟器,或者是使用第三方的例如雷电、逍遥、genymotion 等,在本篇文章中梳理一下通过命令行操作模拟器的的方法,以及串口和镜像替换的相关知识。

二、工具及环境准备

2.1 下载 Android SDK

访问 https://developer.android.google.cn/studio 链接,下载命令行工具,其中包含 avdmanager、sdkmanager:

2.2 安装必须的 SDK 包

使用 SDK 自带工具 sdkmanager,位于 cmdline-tools/bin 目录下,注意要使用模拟器则开发包中必须存在这四个目录:emulator、 platform-tools、system-images、platforms,可以分别使用如下命令下载:

#先安装最新版本 cmdline-tools
./sdkmanager --sdk_root=/home/zsk/Android/sdk/ "cmdline-tools;latest"

#切换至 cmdline-tools/latest/bin 目录下
./sdkmanager --install "emulator"
./sdkmanager --install "platform-tools"
./sdkmanager "system-images;android-28;default;x86_64"

# 这一步可以不用下载,直接创建platforms文件夹即可
./sdkmanager --install "platforms;android-28" 

这里指定了系统版本和架构,default 这里我理解是不带谷歌系统服务的版本,还可以选择 google_apisandroid-automotive-playstore 两个选项,分别代指包含谷歌服务和车载版本。

2.3 设置模拟器存放路径

创建的模拟器往往是比较大的,以 windows 为例是默认存储在 C 盘中,这样显然是不合适的,同时存在某些情况,例如为了建立统一的开发环境,需要将一套模拟器 copy 给多个人使用,那么显示的指定模拟器存放路径无疑是更加方便的,现在分别就 Linux 做简单阐述

SDK 包下创建 avd 目录用于存放模拟器

配置 ANDROID_SDK_HOME 环境变量,注意此变量名不可修改

  # ~/.bashrc 或 /etc/profile
  export ANDROID_SDK_HOME=$HOME/xxx/sdk/avd
  export PATH=$PATH:$ANDROID_SDK_HOME

如有需要,还要修改 .android/avd 目录下已经创建的模拟器的配置文件,例如 device9.0.ini 中修改
path=/.../sdk/avd/.android/avd/device9.0.avd 即可

2.4 创建模拟器

使用 SDK 自带工具 avdmanger,位于 Android/SDK/tools/bin 目录下,主要指令如下:

指令 描述
list、list avd、list target、list device 罗列存在的模拟器
create avd 创建模拟器
move avd 移动或重命名模拟器
delate avd 删除模拟器

create avd 主要指令如下:

指令 描述
-c 设置模拟器 SD 卡大小
-k 模拟器的系统映像的程序包路径
-b 设置模拟器的 ABI
-n 模拟器名字
-f 强制创建(会覆盖现有模拟器)

实例如下:

./avdmanager create avd -n myAVD -k "system-images;android-28;default;x86_64" -b x86_64 -c 2048M -f

2.5 启动模拟器

使用 SDK 自带的工具 emulator,位于 /Android/SDK/emulator 目录下:

# -writable-system 不添加此参数 会导致remount失败
./emulator -avd myAVD -writable-system

三、镜像替换

1、选择编译类型,同模拟器架构一样,例如 aosp_x86_64-eng
2、编译完成之后,在 out/target/product/generic_x86_64 目录下,找到对应修改的 img 用于替换模拟器中的 img。注意 system-qemu.imgvendor-qemu.img,这两个镜像是专门为模拟器运行制作的如果选择 system.imgvendor.img,则 avd 运行失败
3、将 system-qemu.imgvendor-qemu.img,重命名为 system.imgvendor.img
4、替换 Android/SDK/system-images/android-28/default/x86_64/ 下的对应 img
5、重新启动模拟器

四、模拟串口映射

./emulator -avd myAVD -writable-system -qemu -serial /dev/ttyUSB0

五、关于串口的一些指令

1、设置串口的波特率

stty -F /dev/ttyUSB0 raw 460800

2、获取串口的基本信息

stty -F /dev/ttyUSB0

3、向串口传输文件

cat test.txt > /dev/ttyUSB0

4、展示串口输出数据

cat /dev/ttyUSB1

5、保存串口输出数据

cat /dev/ttyUSB1 > log.txt

6、向串口输入数据/指令

#这里可能需要先使用 stty 指令设置好串口的波特率之后才能写入数据
echo -e "\$CFGPRT,1,0,115200,1,3\r\n" > /dev/ttyUSB1
echo -e "\$CFGSAVE\r\n" > /dev/ttyUSB1

7、grep过滤串口数据操作

# --binary-files=text 表示将二进制视为文本搜索
cat ttyUSB1 | grep --binary-files=text xxx

7、Android 应用层打开串口时需要注意 seLinux 权限,具体使用方式可参见 项目实例

参考

[ 1 ] 手动修改android模拟器的system.img
[ 2 ] 如何使用avdmanager从命令行正确创建Android模拟器?
[ 3 ] Android模拟器挂载虚拟串口进行通信之踩坑记

你可能感兴趣的:(Android 模拟器相关基础知识)