adb -e uninstall package 如何检测模拟器?深入的模拟器检测

How does adb -e uninstall package detect emulators? In-depth emulator detection

有人告诉我 运行 命令“adb -e uninstall com.example.myapp”因为“-e”而特别适用于模拟器。 ADB怎么知道这个设备是模拟器呢?是否有任何可用的源代码?

我试图找到一种更深入的方法来检测不依赖于 BUILD.PROP 或任何容易更改的值的模拟器。如果有人可以帮助回答这个问题,或者指导我了解与更深入的模拟器检测相关的任何信息,我将不胜感激。请不要提供任何导致购买模拟器检测产品的信息。

adb 主要由客户端-服务器模型组成。当您在命令行中键入 adb 时,您正在使用 adb-client 与 always-运行 adb-server 通信。

adb-server "talks to devices" 通过两种不同的传输机制。 USB 和 TCP。如果你放入 -e 标志,adb-client 明确地将其传输机制设置为 'transport-local'(与 'transport-usb') 并尝试连接到位于 tcp:localhost:5037.

的 adb-server

Android 模拟器也通过 TCP 连接到 adb-server。

所以为了回答你的问题,如果你为 adb 客户端指定 -e,它会尝试通过 TCP 连接到 adb-server,adb-server 检查来自客户端的设置传输机制并尝试通过用于模拟器的 TCP 或用于实际设备的 USB。如果有多个模拟器实例 运行,adb -e 将失败。

adb is open 的源代码。您可以在那里了解更多信息。