pap*_*agi 11 android emulation
如果我在一台机器上使用-no-window选项运行多个模拟器.命令"adb devices"显示:
List of devices attached
emulator-5554 device
emulator-5556 device
emulator-5558 device
...
Run Code Online (Sandbox Code Playgroud)
但是,根据这个输出,我根本无法区分每个仿真器设备.我需要知道哪个模拟器在AVD上运行,然后我可以安装APK或向模拟器发送命令.
如何在运行后识别每个仿真器设备或获取仿真器的序列号?
Die*_*ano 25
始终在相同的端口上启动相同的AVD,不要让模拟器决定.使用
$ emulator -ports X,Y @avd_X
Run Code Online (Sandbox Code Playgroud)
然后,序列号将是emulator-X,您的avd_X将始终位于端口X,Y上,因此您可以使用此序列号运行命令,例如
$ adb -s emulator-X shell cmd
Run Code Online (Sandbox Code Playgroud)
杀死模拟器运行
$ adb -s emulator-X emu kill
Run Code Online (Sandbox Code Playgroud)
我知道有两种方法可以执行反向序列号到 AVD 名称查找
正如this SO answer中指出的那样......您可以使用Telnet反向查找每个序列号的AVD名称。这有点弱,因为您所做的只是找到一个给定特定 AVD 名称启动的模拟器实例。它不会唯一标识您要使用的模拟器。它还需要使用 telnet 并解析每个模拟器的端口号。
首先获取当前运行的序列号
adb devices
Run Code Online (Sandbox Code Playgroud)
然后 telnet 到每个设备的端口号
telnet localhost 5554
Run Code Online (Sandbox Code Playgroud)
并发出命令
avd name
Run Code Online (Sandbox Code Playgroud)
这将返回该模拟器的 AVD 名称。
我最初在一个名为DCMTK的项目中看到了这一点。生成一个 UUIDuuidgen并在启动时在模拟器上设置一个属性!我的示例启动一个模拟器,对需要在目标上运行代码以确定类型信息的库执行一些编译时检查。
emulator -avd nexus19-arm -no-window -no-boot-anim -noaudio -prop emu.uuid=7a6f8701-43c2-4e16-988a-8b4992c0bf8d >/dev/null </dev/null 2>&1 &
Run Code Online (Sandbox Code Playgroud)
然后,当您想找到模拟器的特定实例时,您只需滚动浏览所有正在运行的模拟器并查找该 UUID。
adb -s emulator-5556 shell getprop emu.uuid
Run Code Online (Sandbox Code Playgroud)
在一个循环中:
for SERIAL_NUMBER in `adb devices| grep emulator| cut -f1`; do
UUID=`adb -s ${SERIAL_NUMBER} shell getprop emu.uuid | tr -d '\r\n'`
echo ${SERIAL_NUMBER} ${UUID}
done
Run Code Online (Sandbox Code Playgroud)
adb -s ${SERIAL_NUMBER} wait-for-device,您就知道何时可以与模拟器通话sys.boot_completedadb -s ${SERIAL_NUMBER} emu kill| 归档时间: |
|
| 查看次数: |
17096 次 |
| 最近记录: |