Android模拟器-5554离线。

211

我遇到了emulator-5554的问题,它一直告诉我它处于离线状态。

当我在命令行中运行adb devices时,它会说

emulator-5554 offline

即使我重新启动,我尝试运行该命令,它仍然显示为离线状态。

问题是,当我尝试使用abd install <path>从命令提示符安装.apk文件到模拟器时,它告诉我它处于离线状态。如果我创建另一个设备并运行该设备,然后尝试安装.apk文件,则会说我连接了太多设备。换句话说,我无法安装我的.apk文件。

我该如何消除那个emulator-5554?我听说如果你重新启动,它应该清除所有设备,但这似乎没有起作用。就像它在我的计算机启动时被初始化一样。有人遇到过这个问题吗?

谢谢


3
为了确定问题是否是模拟器造成的,请按照以下步骤进行操作:1. 打开一个模拟器。2. 打开另一个模拟器。3. 运行命令 adb devices 获取模拟器的名称。4. 尝试通过执行命令 adb -s NAME_OF_DEVICE install file.apk 安装 APK。5. 告诉我们发生了什么。 - Cristian
我回家后会试一下(现在正在工作),我不知道你可以指定要安装的设备。那应该非常有帮助。我几小时后会更新。谢谢回复! - hanesjw
再次感谢您的评论。按照您的建议,我成功地在模拟器上安装了apk。虽然未连接的设备仍然显示在我的设备列表中,但我只想安装那个.apk文件。再次感谢,它起作用了! - hanesjw
我认为这个问题与以下相关:https://dev59.com/DG025IYBdhLWcg3wbVan#13815712 请尝试查看此线程。 - ivy
这并不是回答你的问题,但可能会解决你的问题 - adb -d 指定 USB 设备而不是模拟器,adb -e 模拟器而不是 USB 设备,adb -s NAME 可以用于具体指定要使用的设备,尽管我不确定最后一个选项是否总是按照您想象的方式起作用。 - Erhannis
进入Android设备管理器,停止模拟器并右键单击,然后点击恢复出厂设置。 - David Morrow
48个回答

175

1 . 只需“清除数据”即可解决此问题。

在此输入图像描述

2 . 如果不起作用,请前往模拟设备并启用开发者选项>启用USB调试


4
卸载模拟器中的应用程序对我有帮助。但这与清除数据的概念相同。 - james
4
这个可以与下面的“清除数据”一起使用,以帮助解决问题。 - S. Gissel
3
只需启用USB调试和冷启动即可。 - cosmarc
1
这个屏幕是从工具 - AVD 管理器中的。 - live-love
冷启动 + USB 调试 - Inliner
可能是因为我最近在这个模拟器设备上启用了开发者模式,然后又禁用了它。如果之后我禁用调试,就无法看到日志。 - Inliner

99
在这种情况下,您可以执行以下所有操作,以确保您的模拟器重新开始工作:
  1. 转到cmd并键入 adb kill-server
  2. 打开任务管理器并在进程中查找 adb 。如果找到一个,请右键单击它并单击“结束进程树”。
  3. 在eclipse中,转到窗口> Android虚拟设备管理器,单击要启动的AVD,单击启动并取消选中“从快照启动”,然后单击启动。
就是这样!需要一些时间,它应该解决您的问题。

这对我也起作用了(无论什么情况下,杀死ADB都不能解决我的问题)。 - Booger
我一旦杀掉了那个进程树,adb运行设备列表就清空了 :) 它起作用了。 <3 谢谢 - DeathRs
19
在Android Studio中,将虚拟设备的“Boot Option”从“Quick Boot”更改为“Cold Boot”对我有用。 - eldes
当我从Visual Studio 2019执行Android Device Manager时,我在哪里可以找到“从快照启动”设置? - jacktric
只有完全卸载模拟器和XAML才能解决我的问题。谷歌变得太懒了,不检查每个构建。 - Tertium

46

Android检测模拟器的方式是从端口5555开始扫描。

adb devices列表中看到的数字(在您的情况下为5554)将比adb发现的开放端口少1个。

您可能有一个正在监听5555端口的进程。为了摆脱“离线”设备,您需要找到该应用程序并关闭它或重新配置它以侦听其他端口。


6
您可能有一个正在监听端口5555的进程在运行。这对我们很有帮助,因为我们在该端口上运行了另一个服务器,而完全忘记了它! - abhijit
它总是从5554开始 - 在我所有的电脑上(家庭和工作电脑)...并且在使用多个模拟器时始终是偶数(5554、5556、5558、5560等)。 - Phantômaxx
1
这也对我有帮助! 我有一个在5555端口开放的端口,显示为模拟器5554 (?)。已经尝试过不起作用的“重新启动服务器”样式答案的每个人都应该继续扫描其本地主机。 我以为ADB会更直接地使用USB设备,而不是查看我的本地端口并做出关于那里是否有模拟器的假设,甚至没有进行协议检查。 - mvr
1
非常感谢,同时也解决了我的问题。我无法相信有一个qemu进程占用了该端口。 - Rafael Zhou
4
谢谢,lsof -i tcp:5555 帮助我杀掉了正确的进程。 - Nicolas de C
显示剩余3条评论

42

这个解决方案适用于Windows操作系统。

(查看@Chris Knight的解决方案,适用于Mac/Linux)

  1. 启动Windows Powershell:

    开始 -> 输入 'powershell' -> 按 ENTER 键

  2. 运行以下命令:adb devices


PS C:\Users\CJBS>adb devices
List of devices attached
emulator-5656   host
emulator-5652   host
12b80FF443      device

在这种情况下,12b80FF443 是我的物理设备,而 emulator-* 条目是垃圾数据。


根据@Brigham所说,"Android检测模拟器的方法是从端口5555开始扫描。" 端口号在模拟器名称后指定(在这种情况下为5656和5652)。要检查的端口号是模拟器端口号加1。所以在这种情况下:


5656 + 1 = 5657

5652 + 1 = 5653

因此,让我们看看哪个程序正在使用这些端口。在这种情况下,要检查的端口都以 "565" 开头。所以我将搜索以565开头的已使用端口。执行:netstat -a -n -o | Select-String ":565"

PS C:\Users\CJBS> netstat -a -n -o |  Select-String ":565"

  TCP    127.0.0.1:5653         127.0.0.1:5653         ESTABLISHED     5944
  TCP    127.0.0.1:5657         127.0.0.1:5657         ESTABLISHED     5944
  1. 这个输出中的最后一个字段是 PID(进程 ID)- 在这种情况下,这两个端口的 PID 都是 5944。那么让我们看看这个进程 ID 是什么。执行:tasklist /v | Select-String 5944。将 5944 替换为上一个命令的输出:
PS C:\Users\CJBS> tasklist /v | Select-String 5944

adb.exe                       5944 Console                    1      6,800 K Running         MyPCName\CJBS          0:06:03 ADB Power Notification Window

真是个惊喜,它是ADB。正如其他答案所述,也可能是其他程序。

  1. 现在,只需终止该进程ID。执行kill 5944,将5944替换为先前命令中的PID。

PS C:\Users\CJBS> kill 5944
  1. 为确认虚假的模拟器已经移除,请重新运行以下命令:adb devices


  1. To confirm that the spurious emulator is gone, re-run the following command: adb devices
PS C:\Users\CJBS>adb devices
List of devices attached
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
12b80FF443      device

ADB重新启动(就像之前被杀死的那样),并且它不再检测到虚假的模拟器。


谢谢,我的情况是VSCode打开了一个5555端口并创建了一个幽灵5554模拟器。在操作期间关闭了VSCode。 - Ikon
非常感谢,正是我所需要的!我还学到了PowerShell命令的详细课程。 - ConcernedHobbit
这个方法非常有效,在我经过了两个小时的研究后,这是唯一可行的方法!对于Windows系统:在第三步中,只需运行" netstat -a -n -o ",复制内容并粘贴到记事本中,然后搜索模拟器端口+1。接下来运行"taskkill /PID #### /F",其中####代表你的端口号。然后重新启动ADB,问题就解决了。 - WolverinEli

32

在 AVD 管理器中,尝试使用下拉菜单中的 "冷启动" 选项。这对我很有效!


7
在尝试这些过于复杂的解决方案之前,这可能是人们应该尝试的第一件事情...... - ralfoide
谢谢!我已经苦苦挣扎了将近两个小时。 - Anirudh babbar

23

如果您正在使用Linux或Mac,并假设离线设备为“emulator-5554”,则可以运行以下命令:

netstat -tulpn|grep 5554

这将产生以下输出:

tcp        0      0 127.0.0.1:5554          0.0.0.0:*               LISTEN      4848/emulator64-x86
tcp        0      0 127.0.0.1:5555          0.0.0.0:*               LISTEN      4848/emulator64-x86

这告诉我进程 ID 4848 (你的可能不同) 仍在监听端口 5554。你现在可以使用以下命令杀死该进程:

sudo kill -9 4848

并且幽灵离线设备已经不存在了!

在 macOS Big Sur 及更高版本中,请使用:

sudo lsof -i -P | grep LISTEN | grep 5554

查找过程。


18

我终于解决了这个问题, 我必须从模拟器设置中进入开发人员选项, 然后向下滚动一点,打开USB调试。我的设备立即被识别在线,并且我不再遇到那个问题了。我尝试了重新启动Android Studio和模拟器,杀掉adb进程,但这些方法都没有奏效。


1
你是一个英雄! - Felipe Castilhos
3
你好@Shamsul,你能描述一下在模拟器中如何从设置中访问开发者选项吗?我猜你指的是Android Studio中的AVD Manager。我遇到了和这个帖子中描述的相同的问题,并尝试了所有建议的方法,除了你的建议。我在AVD Manager中没有看到任何有关模拟器的开发者选项。 - Eddie
1
嗨,Eddie,打开开发者选项的常规步骤对于模拟器和真实设备是相同的。在软件信息中找到构建号码,重复点击它,大约7-10次后,您会看到开发者选项已启用。 - Shamsul Arefin
我通过在“开发者选项”中切换“USB调试”来解决了这个问题。我不确定为什么会突然出现这种情况,但这解决了问题。 - unhappyCrackers1
这就是最后起作用的。在模拟器上做这个其实很疯狂……毕竟它原本是用来调试的…… - kbrmys
我正在使用模拟器 :( - Rodrigo Ibarra

15

我也遇到了同样的问题。我已经尝试了这里描述的所有解决方案,但它们都没有帮助我。然后我删除了 Android 虚拟设备管理器 中的所有模拟器,并创建了新的模拟器。问题在于 Android 虚拟设备管理器 中的 CPU/ABI 系统映像配置。我的 Windows10 机器上的模拟器系统映像为 x86,永远处于离线状态,而具有系统映像 x86_64 的模拟器按预期正常工作。所以请注意这一点。


在我的情况下,针对x86系统镜像的Windows 10,我只需要删除所有模拟器,然后重新创建它们。 - Dika
2
非常感谢,我花了很多时间尝试让它工作,这就是我的问题。 - Brendan Samek
同样的问题,但是在Windows 7上。 - Viktor Brešan
1
谢谢你!差不多忙了两天。你是个英雄。 - Rodrigo Ibarra
@RodrigoIbarra 非常高兴能够帮助你。我也曾经面临过相同的困难。 - Volodymyr

11

我通过打开命令提示符来解决了这个问题:

adb kill-server

adb devices

启动后,ADB现在可以检测到设备/模拟器。


10

将USB调试功能启用到您的模拟器中

  1. 设置 > 关于手机 > 构建号 > 点击7次以成为开发者;
  2. 设置 > 开发者选项 > USB调试。

就这样,享受吧。


1
重新启用 USB 调试帮助我解决了问题(关掉后重新开启)。 - Maxim Mazurok

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接