android studio显示* daemon not running; starting now at tcp:5037
时间: 2023-11-29 12:23:12 浏览: 409
这个错误通常是由于Android Debug Bridge(ADB)守护程序未正常运行导致的。您可以通过以下步骤解决该问题:
1. 打开终端或命令提示符。
2. 输入以下命令并按回车键:adb kill-server
3. 然后输入以下命令并按回车键:adb start-server
4. 您应该会看到以下消息“daemon started successfully”。
如果问题仍然存在,请尝试重新启动Android Studio并重新连接设备。希望以上信息对您有帮助!
相关问题
* daemon not running; starting now at tcp:5037daemon started successfully
<think>我们正在解决ADB连接设备时出现的特定错误:提示"daemon not running",然后启动5037端口的守护进程成功,但仍然无法连接设备。根据引用[1]中的错误信息,用户可能遇到了ADB服务启动失败的问题。
结合之前提供的解决方案和当前错误,我们需要重点关注ADB服务本身的问题。错误信息中显示"could not read ok from ADB Server",这表明ADB客户端无法与ADB服务器建立通信。
以下是针对此问题的具体解决步骤:
1. **检查端口占用**:
5037端口是ADB默认的通信端口,如果该端口被其他程序占用,ADB服务将无法启动。
在Windows上,我们可以使用以下命令检查端口占用情况:
```cmd
netstat -ano | findstr "5037"
```
如果发现占用端口的进程,记录其PID,然后在任务管理器中结束该进程。
2. **重启ADB服务**:
有时ADB服务可能处于不稳定状态,尝试强制重启:
```cmd
adb kill-server
adb start-server
```
3. **更新ADB版本**:
旧版本的ADB可能存在兼容性问题,请下载最新版本的Platform Tools替换原有文件(包括adb.exe和两个dll文件)。
4. **防火墙和杀毒软件**:
临时禁用防火墙和杀毒软件,因为它们可能阻止ADB服务通信。
5. **使用其他端口(可选)**:
如果5037端口持续被占用,可以尝试更改ADB的默认端口:
```cmd
set ADB_LOCAL_TRANSPORT_PORT=5039
adb start-server
```
注意:更改端口后,其他ADB命令也需要设置相同的环境变量。
6. **检查ADB路径冲突**:
如果系统中安装了多个ADB(如Android Studio、第三方模拟器自带的ADB),可能导致版本冲突。确保命令行中使用的ADB是你期望的版本(通过`adb version`检查),并考虑将其他路径中的adb.exe暂时重命名。
7. **模拟器特殊处理**:
引用[1]中提到了夜神模拟器。对于模拟器,通常需要连接特定的端口(如夜神模拟器的62001端口)。但前提是ADB服务本身必须正常运行。如果ADB服务无法启动,连接模拟器也会失败。因此,先确保ADB服务正常,再连接模拟器:
```cmd
adb connect 127.0.0.1:62001
```
8. **重启计算机**:
如果以上步骤无效,重启计算机可以释放被占用的资源。
9. **查看ADB日志**:
通过设置环境变量`ADB_TRACE`来获取详细日志:
```cmd
set ADB_TRACE=all
adb start-server
```
观察日志输出,定位问题。
10. **重新安装ADB**:
完全删除现有ADB文件,从官网下载最新版本重新安装。
注意:在执行上述步骤时,请确保以管理员权限运行命令提示符(Windows)或使用sudo(Linux/Mac)。
如果问题仍然存在,请提供更多信息,例如操作系统版本、ADB版本、设备型号等。
§§相关问题§§
1. 如何检测并解决Windows系统中的端口冲突问题?
2. 如何为ADB设置自定义端口?
3. 如何解决多个ADB版本冲突的问题?
4. 如何解读ADB的详细日志?
5. 夜神模拟器与ADB连接的特殊配置有哪些?</think>### ADB连接失败:守护进程启动成功但无法连接设备的解决方案
根据您描述的错误信息(`daemon not running; starting now at tcp:5037 daemon started successfully`),这是ADB服务启动但无法与设备通信的典型问题。以下是系统化的解决步骤:
#### 🔧 1. 解决端口冲突(首要步骤)
错误显示ADB尝试在5037端口启动但失败,通常是因为:
```powershell
# 检查5037端口占用
netstat -ano | findstr ":5037"
# 结束占用进程(需管理员权限)
taskkill /F /PID <占用进程ID>
```
- 常见冲突程序:360安全卫士、腾讯电脑管家、其他安卓模拟器
- 解决方案:关闭冲突程序或修改ADB端口:
```cmd
set ADB_LOCAL_TRANSPORT_PORT=5039
adb start-server
```
#### ⚙️ 2. 修复ADB服务状态
```cmd
:: 完全重置ADB服务
adb kill-server
taskkill /f /im adb.exe # 强制结束残留进程
adb start-server
```
- 观察输出是否包含`* daemon started successfully *`
- 若失败,手动删除`%USERPROFILE%\.android`目录下的`adbkey`文件[^1]
#### 🔄 3. 更新ADB二进制文件(关键)
从[官方Platform-Tools](https://developer.android.com/studio/releases/platform-tools)下载最新版本:
1. 替换以下文件:
- `adb.exe`
- `AdbWinApi.dll`
- `AdbWinUsbApi.dll`
2. 存放在`Android/sdk/platform-tools/`目录
3. 重启命令提示符执行:
```cmd
adb version # 验证版本
```
#### 📱 4. 设备端特殊处理
针对夜神模拟器等设备:
```cmd
# 夜神模拟器专用端口
adb connect 127.0.0.1:62001
# 其他模拟器端口参考
# 雷电模拟器: 5555
# 逍遥模拟器: 21503
```
- 在模拟器设置中开启`USB调试`和`Root权限`
- 重启模拟器后执行`adb devices`
#### 🛡️ 5. 防火墙与权限修复
- **Windows防火墙**:
1. 控制面板 → Windows Defender防火墙
2. "允许应用通过防火墙" → 勾选`adb.exe`
- **管理员权限**:
```powershell
# 创建adb_clean.bat
taskkill /f /im adb.exe
del %USERPROFILE%\.android\adbkey
adb start-server
```
右键 → 以管理员身份运行
#### 🔍 6. 终极排查
```cmd
:: 启用详细日志
set ADB_TRACE=all
adb devices > adb_log.txt 2>&1
```
检查日志中的`bind: Address already in use`或`cannot bind 'tcp:5037'`错误
> **关键提示**:问题解决后,执行`adb devices`时应看到类似输出:<br>
> `List of devices attached`<br>
> `emulator-5554 device`
* daemon not running; starting now at tcp:5037\r\n* daemon started successfully
<think>嗯,用户的问题是询问adb的"daemonnotrunning,startingnowattcp:5037"提示的原因。用户似乎是在开发或调试过程中遇到了这个提示,想要了解其背后的机制。用户引用的Puppeteer资料虽然提供了Chromium命令行参数的参考,但和当前adb问题关联不大。需要专注于安卓调试桥的核心机制来解释。adb采用C/S架构设计,这个提示是典型的服务端未启动时的正常行为。关键在于说明三点:1.daemon的本质是后台服务进程adbd2.5037端口是adbserver的标准通信端口3.首次连接时的自动启动机制用户可能是安卓开发者或逆向工程师,从提问方式看具备一定技术基础,所以可以适当展开内部机制,但要注意避免术语堆砌。可以补充常见误解,比如误认为这是错误提示。之前的回复已经覆盖了核心原理,但可能还可以强调:-这个提示出现在USB连接和网络调试场景-开发者工具(如AndroidStudio)会隐式处理这个过程-通过`adbstart-server`可主动触发如果用户后续追问,可以进一步解释adbd与设备内核的交互,或者5037端口冲突的解决方案。</think>
在 Android 开发中,当您看到终端提示 **`adb daemon not running; starting now at tcp:5037`** 时,这是一个正常的系统行为,表明 ADB 服务正在按预期启动。以下是详细解释:
---
### 🔧 原因与机制
1. **ADB 架构**
ADB (Android Debug Bridge) 采用 **客户端-服务端架构**:
- **ADB 客户端 (Client)**:用户执行的命令(如 `adb devices`)
- **ADB 服务端 (Server)**:在后台运行的后台进程(即 `adb daemon`),负责管理设备连接
- **ADB 守护进程 (adbd)**:运行在 Android 设备上的服务
2. **触发条件**
当您首次执行 ADB 命令时,系统检测到服务端未运行(`adb daemon not running`),会自动启动服务端进程,并监听默认端口 **`tcp:5037`**。
3. **端口作用**
- `5037` 是 ADB 服务端的**标准通信端口**
- 客户端通过此端口与服务端通信(如列出设备、发送命令)
---
### 🛠 解决方案(若需主动控制)
以下操作适用于服务启动异常的情况(如端口冲突):
| **方法** | **命令** | **作用** |
|----------------------------------|-----------------------------------|-----------------------------------|
| **手动启动服务端** | `adb start-server` | 强制启动 ADB 守护进程 |
| **手动停止服务端** | `adb kill-server` | 结束进程并释放端口 |
| **重置端口占用** | `adb -P <端口号> start-server` | 指定非默认端口(解决冲突) |
| **查看服务端状态** | `adb devices -l` | 检测服务进程是否活跃 |
---
### ⚠️ 注意事项
1. **系统防火墙拦截**
确保 `5037` 端口未被防火墙阻止(尤其 Windows Defender 或 macOS 防火墙)。
```bash
# Windows 检查端口开放
netsh advfirewall firewall show rule name="ADB Port 5037"
```
2. **多用户冲突**
若系统存在多个用户,`adb server` 可能因权限问题无法启动:
```bash
# 切换用户后重新启动
sudo -u <你的用户名> adb kill-server
sudo -u <你的用户名> adb start-server
```
3. **开发者选项配置**
确保设备已开启 **USB 调试模式** → 开发者选项中勾选 **"仅充电模式下允许ADB调试"**(部分厂商需额外授权)。
---
### 🌐 技术细节补充
- ADB 服务端启动后会绑定 `127.0.0.1:5037`,仅接受本机连接[^1]。
- 若需远程调试,需通过 `adb tcpip 5555` 开启设备端网络调试端口。
- 连接过程:
`客户端 (adb命令) → 服务端 (:5037) → adbd (设备:5555)`
---
**总结**:该提示表示 ADB 正在**自动初始化守护进程**,通常无需干预。仅当命令反复失败时,需按上述方案排查端口冲突或权限问题。
[^1]: ADB 服务端设计基于本地套接字通信,限制外部访问以提升安全性。
阅读全文
相关推荐
















