Android emulator Android获取设备的给定名称,反之亦然

Android emulator Android获取设备的给定名称,反之亦然,android-emulator,adb,Android Emulator,Adb,当前,当我运行adb设备时,它会给我一个设备列表,看起来像: emulator-5554 device emulator-5556 device 我的目标是找到一个可以在shell中运行的命令,该命令以设备名称作为参数,例如Nexus7,并返回相应的设备序列,例如emulator-5554。如果这是不可能的,我希望能够有一个函数,它将emulator-5554作为参数,并返回Nexus7(前一个函数的相反方向),然后我将在adb devices中的所有设备上循环,并找出与Nexus

当前,当我运行
adb设备时,它会给我一个设备列表,看起来像:

emulator-5554    device
emulator-5556    device
我的目标是找到一个可以在shell中运行的命令,该命令以设备名称作为参数,例如
Nexus7
,并返回相应的设备序列,例如
emulator-5554
。如果这是不可能的,我希望能够有一个函数,它将
emulator-5554
作为参数,并返回
Nexus7
(前一个函数的相反方向),然后我将在
adb devices
中的所有设备上循环,并找出与
Nexus7
匹配的设备

更新

我找到了一个解决方案,它是在启动avd时指定端口号,然后我知道哪个模拟器映射到哪个avd名称,但理想情况下我仍然希望知道这里的答案。

  • 获取所有正在运行的仿真程序进程的PID列表
  • 解析他们的cmdline,收集avd名称
  • 检查这些进程打开的tcp端口
  • 将打开的端口与adb设备进行匹配

使用telnet到emulator是可能的。不幸的是,这不是一个单一的命令,但一般来说,使用shell可以实现自动化。基本思路如下:

  • 查找仿真器的端口号(5554):

  • Telnet到emulator:

    $ telnet localhost 5554
    Trying 127.0.0.1...
    Connected to localhost.
    ...
    OK
    avd name
    Nexus7
    
  • Nexus7是avd名称

    另请参见此答案,了解如何在一行中进行telnetting:

    仿真器-列出AVD
    $ telnet localhost 5554
    Trying 127.0.0.1...
    Connected to localhost.
    ...
    OK
    avd name
    Nexus7