INFO: scrcpy 1.16 <https://github.com/Genymobile/scrcpy> ERROR: Failed to execute: [D:\software\scrcpy-win64-v2.1.1], [push], ["D:\scrcpy-win64-v1.16\scrcpy-server"], ["/data/local/tmp/scrcpy-server.jar"] ERROR: Could not execute "adb push" Press any key to continue...
时间: 2025-07-25 19:33:53 浏览: 11
<think>我们正在解决scrcpy执行adb push失败的问题,错误信息为"ERROR Could not execute adb push"。
根据引用[2]和引用[3]中关于adb命令的使用,特别是引用[2]提到使用-s选项指定设备,引用[3]也使用了-s参数指定设备SN。
可能的原因:
1. 设备未连接或未授权:确保设备已通过USB连接并授权调试,或者通过无线连接已正确建立。
2. 多台设备连接时未指定设备:当连接多台设备时,使用adb命令需要指定目标设备,否则adb无法确定操作哪台设备。
3. adb版本不兼容:scrcpy可能需要较新版本的adb,或者adb环境变量设置不正确。
4. 文件路径问题:push的文件路径可能不存在或权限不足。
解决方案:
1. 检查设备连接:运行`adb devices`,确认设备已列出且状态为"device"。如果状态为"unauthorized",需要在设备上允许USB调试授权。
2. 如果有多台设备,在scrcpy命令中指定设备:`scrcpy -s <device_serial>`
3. 确保使用scrcpy自带的adb:scrcpy通常自带adb,如果系统adb版本不匹配,可以尝试使用scrcpy目录下的adb(或设置环境变量指向它)。
4. 检查文件路径:确保push的文件路径在设备上可写,例如/sdcard/目录。
另外,引用[3]中提到了使用`adb -s ... push`,我们可以尝试手动执行adb push命令,看是否同样失败,以缩小问题范围。
步骤:
1. 找到scrcpy-server.jar文件的位置(通常在scrcpy安装目录中)。
2. 手动执行push命令:`adb -s <device_serial> push <path_to_scrcpy-server.jar> /data/local/tmp/`
3. 观察错误信息,根据错误信息进一步解决。
如果手动push成功,则可能是scrcpy在调用adb时环境变量或路径问题;如果手动push失败,则根据adb返回的错误信息解决。
常见错误及解决:
- 如果提示“permission denied”,尝试push到其他目录,如/sdcard/,然后通过adb shell移动文件到/data/local/tmp/(需要root权限)。
- 如果提示“no space left on device”,清理设备存储空间。
注意:scrcpy在启动时会自动将scrcpy-server.jar推送到设备并执行,因此push失败会导致scrcpy无法启动。
根据引用[3]中scrcpy执行命令的示例,它使用了`adb -s ... shell CLASSPATH=/data/local/tmp/scrcpy-server.jar ...`,所以确保文件被推送到/data/local/tmp/目录。
如果问题仍然存在,可以尝试更新scrcpy到最新版本,或者使用scrcpy的启动参数`--push-target`指定不同的目标路径(例如/sdcard/),然后通过adb shell移动文件(需要设备有root权限或使用run-as命令,但通常/data/local/tmp/是可写的)。
另外,引用[1]中提到了自动化构建验证的adb命令,但与本问题关系不大,主要参考引用[2]和引用[3]。</think>### scrcpy ERROR "Could not execute adb push" 解决方法
当使用scrcpy时遇到`ERROR Could not execute adb push`错误,通常是由于设备连接或权限问题导致的。以下是逐步解决方案:
#### 1. **确认设备连接状态**
```bash
adb devices
```
- ✅ 正常情况:显示设备ID和`device`状态
`List of devices attached`
`80QBDNQ228H9 device`
- ❌ 异常情况:显示`unauthorized`或未列出设备
- **解决方法**:
- 重新插拔USB线
- 在设备上点击"允许USB调试"授权提示
- 启用开发者选项中的"USB调试"和"文件传输"模式
#### 2. **指定目标设备(多设备时必需)**
当连接多台设备时,必须使用`-s`参数指定设备序列号(SN):
```bash
scrcpy -s 80QBDNQ228H9
```
- 序列号可通过`adb devices`获取
- 错误示例:`error: more than one device/emulator`
#### 3. **检查ADB版本兼容性**
```bash
adb version
```
- scrcpy要求ADB版本 ≥ 1.0.41
- **解决方法**:
- 更新Android SDK Platform-Tools:
```bash
sdkmanager --update
sdkmanager "platform-tools"
```
- 使用scrcpy自带的ADB(优先尝试):
```bash
# Windows示例
scrcpy\adb.exe devices
```
#### 4. **验证文件传输路径权限**
scrcpy默认推送路径需要写入权限:
```bash
adb shell ls -ld /data/local/tmp
```
- ✅ 应有输出:`drwxrwx--x ... /data/local/tmp`
- ❌ 若显示`Permission denied`:
- **临时方案**:改用用户目录
```bash
scrcpy --push-target /sdcard/
```
- **永久方案**:重启设备进入安全模式后重试
#### 5. **端口冲突处理(无线连接时)**
无线调试时检查端口占用:
```bash
adb kill-server
adb start-server
adb tcpip 5555 # 重置端口
```
#### 6. **防火墙/安全软件检查**
- 临时禁用Windows Defender/防火墙
- 确保adb.exe在安全软件白名单中
#### 7. **终极验证步骤**
手动执行push命令测试:
```bash
adb -s 80QBDNQ228H9 push /path/to/scrcpy-server.jar /data/local/tmp/
```
- 成功时显示传输进度:`... 1.2 MB/s (34904 bytes in 0.028s)`
- 失败时显示具体错误原因
> **技术原理**:scrcpy启动时需要将`scrcpy-server.jar`推送到Android设备的`/data/local/tmp/`目录(引用[3]),若adb无法访问设备或目标路径,就会触发此错误。
阅读全文
相关推荐




















