Files

21 KiB
Raw Permalink Blame History

name, description, triggers, owner, group, version, updated
name description triggers owner group version updated
局域网控制 局域网设备发现与Android远程管理 设备管理、局域网扫描、ADB、投屏、远程控制 金仓 1.0 2026-02-16

局域网控制

基于 ADB + scrcpy 的 Android 设备管理与控制系统。

核心能力

设备连接 → 屏幕镜像 → 远程控制 → 应用管理 → 系统诊断
    │          │          │          │          │
    ▼          ▼          ▼          ▼          ▼
  WiFi/USB   实时显示   鼠标键盘   安装卸载   日志分析

技术架构

1. 桌面端

  • 技术栈Electron + React + Node.js
  • 支持平台macOS、Windows
  • 核心模块
    • 设备连接管理
    • 屏幕镜像显示scrcpy
    • 远程控制交互
    • 文件传输
    • 应用管理

2. 手机端

  • 目标系统Android 7.1.2+
  • 通信协议ADB + WebSocket + HTTP
  • 主要功能:权限管理、屏幕共享、文件访问

3. 项目位置

/Users/karuo/Documents/开发/4、小工具/局域网手机电脑控制

功能清单

设备管理

# 1. 扫描局域网设备
# 自动扫描网段内所有 Android 设备(端口 5555, 5037, 4444, 5556
# 获取设备品牌、型号、Android 版本

# 2. 连接设备
adb connect <IP>:5555

# 3. 查看已连接设备
adb devices -l

# 4. 断开设备
adb disconnect <IP>:5555

屏幕镜像

# 启动屏幕镜像scrcpy
# - 实时显示手机屏幕
# - 支持 60fps 流畅显示
# - 延迟 < 100ms
# - 支持全屏、截图、录屏

# 参数:
# - 画面质量和分辨率设置
# - 帧率和比特率调整

远程控制

# 鼠标点击 → 触摸事件
# 键盘输入 → 手机输入
# 手势操作:滑动、缩放、旋转
# 快捷键支持

应用管理

# 查看已安装应用
adb shell pm list packages

# 安装应用
adb install -r -g <app.apk>

# 卸载应用
adb uninstall <package_name>

# 启动应用
adb shell am start -n <package_name>/.MainActivity

# 停止应用
adb shell am force-stop <package_name>

# 清理应用数据
adb shell pm clear <package_name>

# 启用/禁用应用
adb shell pm enable <package_name>
adb shell pm disable <package_name>

系统诊断

# 设备信息
adb shell getprop ro.build.version.release  # Android 版本
adb shell getprop ro.product.model           # 设备型号
adb shell getprop ro.product.cpu.abi         # CPU 架构

# 内存状态
adb shell cat /proc/meminfo

# 存储空间
adb shell df -h

# 应用状态
adb shell dumpsys package <package_name>

# 崩溃日志
adb shell logcat -d | grep FATAL
adb shell logcat -d | grep CRASH

# 性能优化
adb shell pm clear <package_name>  # 清理缓存

文件传输

# 推送文件到手机
adb push <本地路径> <手机路径>

# 从手机拉取文件
adb pull <手机路径> <本地路径>

# 浏览手机文件
adb shell ls /sdcard/

使用场景

场景 1连接并控制新设备

# 1. 扫描局域网设备
# 使用桌面端应用的"扫描设备"功能
# 或手动连接adb connect 192.168.2.15:5555

# 2. 验证连接
adb devices -l

# 3. 启动屏幕镜像
# 在桌面端应用中点击"屏幕镜像"

# 4. 开始控制
# 鼠标点击 = 触摸
# 键盘输入 = 手机输入

场景 2批量安装应用

# 示例:安装微信到 RK3399 设备Android 7.1.2, arm64

# 1. 连接设备
adb connect 192.168.2.15:5555

# 2. 卸载旧版(如果存在)
adb shell pm list packages | grep com.tencent.mm
adb shell am force-stop com.tencent.mm
adb uninstall com.tencent.mm

# 3. 安装新版
adb install -r -g 应用文件/weixin8062android2900_0x28003e39_arm64.apk

# 4. 验证安装
adb shell dumpsys package com.tencent.mm | grep versionName

# 5. 启动验证
adb shell monkey -p com.tencent.mm 1

场景 3应用闪退修复

# 1. 检查设备信息
adb shell getprop ro.build.version.release
adb shell cat /proc/meminfo

# 2. 收集崩溃日志
adb shell logcat -d > logs/crash_$(date +%Y%m%d_%H%M%S).log
adb shell logcat -d | grep -E "FATAL|CRASH"

# 3. 分析问题
# - 权限不足:授予必要权限
# - 缓存问题:清理应用数据
# - 版本不兼容:更换适配版本

# 4. 执行修复
adb shell pm clear <package_name>  # 清理缓存
adb shell pm grant <package_name> <permission>  # 授予权限
adb shell pm enable <package_name>  # 启用应用

# 5. 验证修复
adb shell monkey -p <package_name> 1

场景 4投屏方案部署

# MacBook 投屏到 Android 设备

# 方案 1BetterDisplay + VNC
# - BetterDisplay 创建虚拟显示器
# - macOS 屏幕共享服务(端口 5900
# - Android VNC 客户端连接

# 方案 2RustDesk
# - Mac 和 Android 都安装 RustDesk
# - 双向远程桌面连接

# 方案 3AnyDesk
# - 轻量级远程控制
# - 支持 Android 7.1.2+

常用设备配置

RK3399 设备192.168.2.15

型号: RK3399
系统: Android 7.1.2
构建: RK3399_android7.1_20200421092001
架构: arm64-v8a
IP: 192.168.2.15
ADB端口: 5555
序列号: CBI9SU7JNR

适配应用:
  - 微信: weixin8062android2900_0x28003e39_arm64.apk (v8.0.62)
  - 存客宝: ckb.apk (uni.app.UNI2B34F1A)
  - AnyDesk: anydesk.apk
  - RustDesk: rustdesk-1.4.2-universal.apk
  - 腾讯会议: wemeet_android6.apk
  - 飞书: 飞书_7.56.10_APKPure.apk

项目文件结构

局域网手机电脑控制/
├── 开发文档/
│   ├── 需求文档.md
│   ├── 功能迭代记录.md
│   └── 架构设计.md
├── 执行脚本/
│   ├── 安装脚本/
│   ├── 连接脚本/
│   └── 测试脚本/
├── 文档/
│   ├── 安装文档/
│   ├── 连接文档/
│   └── 测试文档/
├── 应用文件/        # APK 安装包
├── ROM文件/         # 系统镜像
├── 数据备份/        # 设备备份
├── 桌面端/          # Electron 应用
│   ├── src/
│   └── out/
├── 手机端/          # Android 应用
└── config/          # 配置文件

执行协议

当用户说"手机控制"、"设备投屏"时

# 1. 定位问题
询问用户具体需求:
- 连接新设备?
- 安装应用?
- 屏幕镜像?
- 系统诊断?

# 2. 检查环境
- 设备 IP 和端口
- ADB 连接状态
- 设备系统版本和架构

# 3. 执行操作
根据需求执行对应功能

# 4. 验证结果
确认操作成功并汇报

当用户说"应用安装"、"应用管理"时

# 1. 收集信息
- 目标应用名称
- 设备信息IP、系统版本、架构
- APK 文件路径

# 2. 检查兼容性
adb shell getprop ro.build.version.release  # Android 版本
adb shell getprop ro.product.cpu.abi         # 架构

# 3. 安装流程
- 检查是否已安装
- 卸载旧版(如需要)
- 安装新版adb install -r -g
- 验证安装dumpsys package
- 启动测试monkey

# 4. 汇报结果
- 版本号
- 权限状态
- 启动状态

当用户说"系统诊断"、"应用闪退"时

# 1. 收集日志
adb shell logcat -d | grep -E "FATAL|CRASH" > crash.log

# 2. 系统信息
- Android 版本
- 内存状态
- 存储空间
- 应用状态

# 3. 分析问题
- 权限不足?
- 缓存问题?
- 版本不兼容?
- 系统资源不足?

# 4. 执行修复
- 清理缓存
- 授予权限
- 启用应用
- 优化性能

# 5. 生成诊断报告
保存到 logs/ 目录

安全原则

设备连接

  • 首次连接需用户确认授权
  • 支持连接密码保护
  • 敏感操作需二次确认

应用操作

  • 卸载应用前确认
  • 清理数据前备份重要信息
  • 避免误删系统应用

系统命令

  • 危险命令rm、dd、reboot需明确警告
  • 刷机操作必须先备份系统
  • 优先使用 -r -g 参数安装(覆盖安装+授予权限)

性能指标

指标 目标值 说明
屏幕镜像延迟 < 100ms scrcpy 优化
帧率 60fps 流畅显示
设备扫描速度 < 10s 局域网 /24 网段
应用安装时间 < 30s 取决于 APK 大小
ADB 连接稳定性 > 95% WiFi 连接

常见问题

1. ADB 连接失败

# 解决方案
adb kill-server
adb start-server
adb connect <IP>:5555

# 尝试其他常见端口
adb connect <IP>:5037
adb connect <IP>:4444
adb connect <IP>:5556

2. 屏幕镜像卡顿

# 降低分辨率
scrcpy -m 1024

# 降低比特率
scrcpy -b 2M

# 降低帧率
scrcpy --max-fps 30

3. 应用安装失败

# 检查架构兼容性
adb shell getprop ro.product.cpu.abi

# 检查 Android 版本
adb shell getprop ro.build.version.release

# 检查存储空间
adb shell df -h /data

# 强制覆盖安装
adb install -r -d -g <app.apk>

4. 应用白屏/闪退

# 检查应用状态
adb shell dumpsys package <package_name> | grep enabled

# 启用应用
adb shell pm enable <package_name>

# 清理缓存
adb shell pm clear <package_name>

# 授予权限
adb shell pm grant <package_name> android.permission.WRITE_EXTERNAL_STORAGE

快捷命令参考

设备信息速查

# 一键获取设备完整信息
adb shell "echo '=== 设备信息 ==='; \
  getprop ro.product.model; \
  getprop ro.build.version.release; \
  getprop ro.product.cpu.abi; \
  echo '=== 内存 ==='; \
  cat /proc/meminfo | grep MemTotal; \
  echo '=== 存储 ==='; \
  df -h /data"

应用状态速查

# 一键检查应用状态
adb shell "dumpsys package <package_name> | \
  grep -E 'versionName|versionCode|enabled|userId|permission'"

通用使用场景

场景 A全新环境快速部署

环境: 任何局域网(家庭/办公室/会议室)
网段: 自动检测192.168.x.0/24
目标: 10分钟内控制所有设备

步骤:
1. 运行设备扫描脚本
   chmod +x scripts/局域网设备管理.sh
   ./scripts/局域网设备管理.sh

2. 自动完成:
   - 检测本机IP和网段
   - 扫描254个IP地址
   - 识别设备类型
   - 显示可控制设备列表

3. 选择操作:
   - 连接 Android 设备
   - 启动屏幕镜像
   - 连接 VNC/RDP
   - 安装应用

输出示例:
📱 Android 手机/平板 (3 台)
  1  192.168.1.100   Xiaomi 12          Android 13      ADB-WiFi
  2  192.168.1.101   OPPO Find X5       Android 12      ADB-WiFi VNC
  3  192.168.1.102   Samsung Galaxy     Android 11      ADB-WiFi

📺 Android TV (2 台)
  1  192.168.1.50    Rockchip RK3399    Android 7.1.2   ADB-WiFi VNC
  2  192.168.1.51    TCL Smart TV       Android 11      ADB-WiFi

💻 电脑 (4 台)
  1  192.168.1.10    MacBook Pro        VNC/RDP         VNC SSH
  2  192.168.1.11    Windows PC         VNC/RDP         RDP
  3  192.168.1.12    Linux Server       SSH             SSH
  4  192.168.1.13    iMac               VNC             VNC

可控制设备总数: 9 

场景 B跨网段设备控制

环境: 不同网段192.168.2.x → 192.168.3.x
方案: 手动指定IP或配置路由

方法1: 直接指定IP
  adb connect 192.168.3.100:5555
  
方法2: 修改扫描网段
  对AI说"扫描 192.168.3.x 网段的设备"
  
方法3: VPN隧道
  连接到同一VPN后进行控制

场景 C会议室设备批量部署

目标: 会议室电视 + 多台平板
应用: 腾讯会议、飞书、存客宝

操作:
1. 扫描发现所有设备
2. 批量连接Android设备
3. 统一安装会议应用
4. 配置自动启动
5. 设置开机自启

命令示例:
# 对AI说
"扫描局域网设备"
"连接所有 Android TV"
"安装腾讯会议到所有设备"
"设置开机自启动腾讯会议"

场景 D多地点设备管理

场景: 家里 + 公司 + 客户现场
方案: 设备配置文件管理

家庭网络 (192.168.1.x):
- 手机: 192.168.1.100
- 电视: 192.168.1.50
- iPad: 192.168.1.101

公司网络 (192.168.2.x):
- 会议室TV: 192.168.2.15
- 演示平板1: 192.168.2.16
- 演示平板2: 192.168.2.17

客户现场 (自动检测):
- 扫描并临时连接
- 完成后断开

操作:
对AI说"切换到家庭网络"
对AI说"切换到公司网络"  
对AI说"扫描当前网络"

实战案例库

案例 1RK3399 微信安装2025-09

设备: Rockchip RK3399
系统: Android 7.1.2, arm64
IP: 192.168.2.15
目标: 卸载旧版微信 → 安装 8.0.62 arm64 版本

执行流程:
1. 网络测试:
   ping 192.168.2.15 -c 2 -W 1000
   → 在线0%丢包avg≈20.8ms

2. ADB连接:
   adb connect 192.168.2.15:5555
   → 成功连接

3. 检查已安装:
   adb shell pm list packages | grep com.tencent.mm
   → 发现旧版本

4. 卸载旧版:
   adb shell am force-stop com.tencent.mm
   adb uninstall com.tencent.mm
   → Success

5. 检查系统信息:
   Android: 7.1.2
   ABI: arm64-v8a
   /data 可用: 20GB

6. 安装新版:
   adb install -r -g weixin8062android2900_0x28003e39_arm64.apk
   → Success

7. 验证安装:
   adb shell dumpsys package com.tencent.mm | grep versionName
   → versionName=8.0.62

8. 启动测试:
   adb shell monkey -p com.tencent.mm 1
   → 成功注入事件,应用启动正常

结果: ✓ 一次成功耗时约3分钟

案例 2存客宝白屏修复2025-01

设备: RK3399, 192.168.2.15
应用: 存客宝 (uni.app.UNI2B34F1A)
问题: 安装后点击白屏无响应

诊断流程:
1. 检查应用状态:
   adb shell dumpsys package uni.app.UNI2B34F1A | grep enabled
   → enabled=0 (被禁用)

2. 检查启动Activity:
   adb shell dumpsys package uni.app.UNI2B34F1A | grep activity
   → io.dcloud.PandoraEntry

3. 收集崩溃日志:
   adb shell logcat -d | grep -E "FATAL|CRASH"
   → 无崩溃日志,确认是禁用问题

修复步骤:
1. 启用应用:
   adb shell pm enable uni.app.UNI2B34F1A
   → Package uni.app.UNI2B34F1A new state: enabled

2. 清理缓存:
   adb shell pm clear uni.app.UNI2B34F1A
   → Success

3. 启动验证:
   adb shell am start -n uni.app.UNI2B34F1A/io.dcloud.PandoraEntry
   → Starting: Intent { cmp=uni.app.UNI2B34F1A/.io.dcloud.PandoraEntry }

4. 检查进程:
   adb shell ps | grep UNI2B34F1A
   → 发现主进程和jse进程都在运行

结果: ✓ 应用正常启动,白屏问题解决

案例 3MacBook 扩展屏方案2025-01

需求: MacBook 投屏到 Android 设备作为扩展屏
设备: 
  - Mac: 192.168.2.7 (MacBook Pro)
  - Android: 192.168.2.15 (RK3399)

方案选择:
✗ Sidecar - 仅支持 iPad
✗ Duet Display - 需要付费且性能一般
✓ BetterDisplay + VNC - 免费且性能好

实施步骤:
1. Mac端配置:
   - 启动 BetterDisplay.app已安装
   - 创建虚拟显示器1920x1080
   - 启用系统屏幕共享
     系统偏好设置 → 共享 → 屏幕共享 ✓

2. 检查网络:
   Mac IP: 192.168.2.7
   VNC端口: 5900(默认)
   防火墙: 允许屏幕共享

3. Android端配置:
   - 检查 VNC 客户端
     adb shell pm list packages | grep vnc
   - 安装 VNC Viewer (如未安装)
   - 配置连接: 192.168.2.7:5900

4. 连接测试:
   # Mac端
   系统偏好设置 → 显示器 → 检测到虚拟显示器
   
   # Android端
   打开 VNC Viewer
   输入: 192.168.2.7:5900
   连接成功 → 显示Mac虚拟显示器内容

5. 优化配置:
   - 分辨率: 1920x1080 (匹配Android屏幕)
   - 帧率: 30fps (流畅度足够)
   - 质量: Medium (平衡性能)

结果: 
✓ Android 设备成功作为 MacBook 扩展屏
✓ 延迟约 50-100ms日常使用流畅
✓ 可用于演示、会议、扩展工作区

案例 4多设备批量管理2025-01

场景: 公司会议室设备部署
设备: 
  - TV1: 192.168.2.15 (RK3399)
  - TV2: 192.168.2.20 (TCL Android TV)
  - Pad1: 192.168.2.16 (小米平板)
  - Pad2: 192.168.2.17 (华为平板)

任务: 统一安装腾讯会议、飞书、WPS

操作流程:
1. 扫描设备:
   ./scripts/局域网设备管理.sh
   → 发现4台Android设备

2. 批量连接:
   for ip in 192.168.2.{15,20,16,17}; do
     adb connect $ip:5555
   done
   → 4台设备全部连接成功

3. 批量安装应用:
   # 腾讯会议
   for device in $(adb devices | grep device$ | awk '{print $1}'); do
     adb -s $device install -r -g wemeet_android6.apk
   done
   
   # 飞书
   for device in $(adb devices | grep device$ | awk '{print $1}'); do
     adb -s $device install -r -g 飞书_7.56.10_APKPure.apk
   done
   
   # WPS Office
   for device in $(adb devices | grep device$ | awk '{print $1}'); do
     adb -s $device install -r -g wps_office.apk
   done

4. 验证安装:
   for device in $(adb devices | grep device$ | awk '{print $1}'); do
     echo "=== $device ==="
     adb -s $device shell pm list packages | grep -E "wemeet|feishu|wps"
   done

5. 设置开机自启:
   # 腾讯会议
   for device in $(adb devices | grep device$ | awk '{print $1}'); do
     adb -s $device shell pm enable com.tencent.wemeet
     adb -s $device shell am start -n com.tencent.wemeet/.MainActivity
   done

结果:
✓ 4台设备全部完成部署
✓ 总耗时约15分钟
✓ 所有应用可正常启动

案例 5远程技术支持2025-01

场景: 客户现场设备问题排查
设备: 客户的 Android TV (未知IP)
问题: 应用闪退

远程支持流程:
1. 引导客户提供信息:
   "请告诉我您的设备IP地址"
   方法: 设置 → 关于 → 状态 → IP地址
   获得: 192.168.3.88

2. 尝试连接:
   ping 192.168.3.88
   → 网络不通(不在同一网段)
   
   方案: 引导客户连接同一WiFi或使用VPN

3. 成功连接后:
   adb connect 192.168.3.88:5555
   → connected to 192.168.3.88:5555

4. 系统诊断:
   # 收集设备信息
   adb shell getprop ro.product.model
   adb shell getprop ro.build.version.release
   
   # 收集崩溃日志
   adb shell logcat -d > crash_log.txt
   grep -E "FATAL|CRASH" crash_log.txt

5. 问题分析:
   发现: 应用权限不足导致崩溃
   
6. 远程修复:
   # 授予必要权限
   adb shell pm grant <package_name> android.permission.WRITE_EXTERNAL_STORAGE
   adb shell pm grant <package_name> android.permission.READ_EXTERNAL_STORAGE
   
   # 清理缓存
   adb shell pm clear <package_name>
   
   # 重启应用
   adb shell am start -n <package_name>/.MainActivity

7. 验证修复:
   adb shell ps | grep <package_name>
   → 进程正常运行

结果:
✓ 远程完成问题诊断和修复
✓ 无需到现场
✓ 客户满意度高

案例 6跨网段设备控制2025-01

场景: 控制不同网段的设备
网络: 
  - 本机: 192.168.110.141/24
  - 目标: 192.168.2.15/24

问题: 不在同一网段无法直接连接

解决方案:

方案1: 路由器配置(推荐)
1. 登录路由器管理界面
2. 添加静态路由:
   目标网段: 192.168.2.0/24
   网关: 本机所在网关
3. 测试连接:
   ping 192.168.2.15
   adb connect 192.168.2.15:5555

方案2: VPN隧道
1. 在两个网段间建立VPN
2. 通过VPN连接后再控制设备

方案3: 端口转发
1. 在192.168.2.x网段找一台可访问的设备
2. 配置端口转发:
   ssh -L 5555:192.168.2.15:5555 user@gateway
3. 连接本地端口:
   adb connect localhost:5555

方案4: 切换网络(最简单)
1. 将Mac连接到 192.168.2.x 网段的WiFi
2. 直接控制设备

实际操作:
采用方案4切换到目标网段WiFi
→ 成功连接并控制设备

注意事项

执行前检查

  1. 确认设备 IP 和端口(默认 5555
  2. 检查 ADB 连接状态(adb devices
  3. 确认设备系统版本和架构
  4. 检查存储空间是否充足

操作规范

  1. 优先复用本地脚本和 APK减少重复下载
  2. 安装应用前检查是否已安装,避免冲突
  3. 删除/卸载操作前务必确认设备为 device 状态
  4. 下载缓慢时及时中断,更换镜像源或直链

日志记录

  1. 重要操作记录到 logs/ 目录
  2. 诊断报告使用时间戳命名:diagnostic_YYYYMMDD_HHMMSS.txt
  3. 成功案例更新到 项目规则文档.md

项目更新

  1. 每次成功执行闭环后更新 项目规则文档.md
  2. 新增功能更新 功能迭代记录.md
  3. 重要配置记录到 config/ 目录

相关资源

本目录

官方文档

项目文档

  • 需求文档:开发文档/需求文档.md
  • 功能迭代:开发文档/功能迭代记录.md
  • 架构设计:开发文档/架构设计.md
  • 项目规则:项目规则文档.md

应用资源

  • APK 安装包:应用文件/
  • ROM 镜像:ROM文件/
  • 配置文件:config/
  • 日志文件:logs/