一芥备、前言
在 Android 開發(fā)過程中會(huì)經(jīng)常使用到模擬器舌菜,常用的方式是借助 Android Studio 去創(chuàng)建和運(yùn)行模擬器日月,或者是使用第三方的例如雷電爱咬、逍遙台颠、genymotion 等串前,在本篇文章中梳理一下通過命令行操作模擬器的的方法荡碾,以及串口和鏡像替換的相關(guān)知識(shí)局装。
二铐尚、工具及環(huán)境準(zhǔn)備
2.1 下載 Android SDK
訪問 https://developer.android.google.cn/studio 鏈接宣增,下載命令行工具爹脾,其中包含 avdmanager、sdkmanager:
2.2 安裝必須的 SDK 包
使用 SDK 自帶工具 sdkmanager落竹,位于 cmdline-tools/bin 目錄下货抄,注意要使用模擬器則開發(fā)包中必須存在這四個(gè)目錄: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"
# 這一步可以不用下載茎杂,直接創(chuàng)建platforms文件夾即可
./sdkmanager --install "platforms;android-28"
這里指定了系統(tǒng)版本和架構(gòu),default 這里我理解是不帶谷歌系統(tǒng)服務(wù)的版本,還可以選擇 google_apis 和 android-automotive-playstore 兩個(gè)選項(xiàng)刽脖,分別代指包含谷歌服務(wù)和車載版本。
2.3 設(shè)置模擬器存放路徑
創(chuàng)建的模擬器往往是比較大的,以 windows 為例是默認(rèn)存儲(chǔ)在 C 盤中院水,這樣顯然是不合適的,同時(shí)存在某些情況檬某,例如為了建立統(tǒng)一的開發(fā)環(huán)境恢恼,需要將一套模擬器 copy 給多個(gè)人使用,那么顯示的指定模擬器存放路徑無疑是更加方便的初坠,現(xiàn)在分別就 Linux 做簡單闡述
在 SDK 包下創(chuàng)建 avd 目錄用于存放模擬器
配置 ANDROID_SDK_HOME 環(huán)境變量碟刺,注意此變量名不可修改
# ~/.bashrc 或 /etc/profile
export ANDROID_SDK_HOME=$HOME/xxx/sdk/avd
export PATH=$PATH:$ANDROID_SDK_HOME
如有需要,還要修改 .android/avd 目錄下已經(jīng)創(chuàng)建的模擬器的配置文件吴菠,例如 device9.0.ini 中修改
path=/.../sdk/avd/.android/avd/device9.0.avd 即可
2.4 創(chuàng)建模擬器
使用 SDK 自帶工具 avdmanger,位于 Android/SDK/tools/bin 目錄下,主要指令如下:
指令 | 描述 |
---|---|
list酿矢、list avd、list target蜜暑、list device | 羅列存在的模擬器 |
create avd | 創(chuàng)建模擬器 |
move avd | 移動(dòng)或重命名模擬器 |
delate avd | 刪除模擬器 |
create avd 主要指令如下:
指令 | 描述 |
---|---|
-c | 設(shè)置模擬器 SD 卡大小 |
-k | 模擬器的系統(tǒng)映像的程序包路徑 |
-b | 設(shè)置模擬器的 ABI |
-n | 模擬器名字 |
-f | 強(qiáng)制創(chuàng)建(會(huì)覆蓋現(xiàn)有模擬器) |
實(shí)例如下:
./avdmanager create avd -n myAVD -k "system-images;android-28;default;x86_64" -b x86_64 -c 2048M -f
2.5 啟動(dòng)模擬器
使用 SDK 自帶的工具 emulator肛捍,位于 /Android/SDK/emulator 目錄下:
# -writable-system 不添加此參數(shù) 會(huì)導(dǎo)致remount失敗
./emulator -avd myAVD -writable-system
三拙毫、鏡像替換
1恬偷、選擇編譯類型帘睦,同模擬器架構(gòu)一樣竣付,例如 aosp_x86_64-eng
2滞欠、編譯完成之后,在 out/target/product/generic_x86_64 目錄下逸绎,找到對應(yīng)修改的 img 用于替換模擬器中的 img棺牧。注意 system-qemu.img 和 vendor-qemu.img颊乘,這兩個(gè)鏡像是專門為模擬器運(yùn)行制作的如果選擇 system.img 和 vendor.img乏悄,則 avd 運(yùn)行失敗
3檩小、將 system-qemu.img 和 vendor-qemu.img规求,重命名為 system.img、vendor.img
4家妆、替換 Android/SDK/system-images/android-28/default/x86_64/ 下的對應(yīng) img
5冕茅、重新啟動(dòng)模擬器
四姨伤、模擬串口映射
./emulator -avd myAVD -writable-system -qemu -serial /dev/ttyUSB0
五乍楚、關(guān)于串口的一些指令
1徒溪、設(shè)置串口的波特率
stty -F /dev/ttyUSB0 raw 460800
2、獲取串口的基本信息
stty -F /dev/ttyUSB0
3臊泌、向串口傳輸文件
cat test.txt > /dev/ttyUSB0
4、展示串口輸出數(shù)據(jù)
cat /dev/ttyUSB1
5嫂拴、保存串口輸出數(shù)據(jù)
cat /dev/ttyUSB1 > log.txt
6贮喧、向串口輸入數(shù)據(jù)/指令
#這里可能需要先使用 stty 指令設(shè)置好串口的波特率之后才能寫入數(shù)據(jù)
echo -e "\$CFGPRT,1,0,115200,1,3\r\n" > /dev/ttyUSB1
echo -e "\$CFGSAVE\r\n" > /dev/ttyUSB1
7、grep過濾串口數(shù)據(jù)操作
# --binary-files=text 表示將二進(jìn)制視為文本搜索
cat ttyUSB1 | grep --binary-files=text xxx
7辩恼、Android 應(yīng)用層打開串口時(shí)需要注意 seLinux 權(quán)限饱普,具體使用方式可參見 項(xiàng)目實(shí)例
參考
[ 1 ] 手動(dòng)修改android模擬器的system.img
[ 2 ] 如何使用avdmanager從命令行正確創(chuàng)建Android模擬器套耕?
[ 3 ] Android模擬器掛載虛擬串口進(jìn)行通信之踩坑記