# 常用资料

## ADB 基础说明

`adb` 是 Android Debug Bridge 的缩写，是 Android 开发中最常用的命令行调试工具。开发 Glass3 眼镜端应用时，`adb` 主要用于确认设备连接、安装 APK、查看日志、重启设备，以及配合 `scrcpy` 投屏。

### 配置 ADB 环境

ADB 通常随 Android SDK Platform-Tools 一起安装。你可以通过下面两种方式获取：

- 已安装 Android Studio：在 SDK Manager 中安装 **Android SDK Platform-Tools**。
- 单独下载：访问 Android 官方 Platform-Tools 下载页：[https://developer.android.com/tools/releases/platform-tools](https://developer.android.com/tools/releases/platform-tools)

安装后，需要确保命令行可以直接执行 `adb`：

```bash
adb version
```

如果命令行提示找不到 `adb`，需要将 Platform-Tools 目录加入系统环境变量 `PATH`。常见目录示例：

```bash
# macOS 示例
~/Library/Android/sdk/platform-tools

# Windows 示例
C:\Users\<你的用户名>\AppData\Local\Android\Sdk\platform-tools
```

### 常用 ADB 命令

| 命令 | 用途 |
| --- | --- |
| `adb devices` | 查看电脑当前识别到的 Android 设备。 |
| `adb -s <设备序列号> install app.apk` | 向指定设备安装 APK。 |
| `adb -s <设备序列号> logcat` | 查看指定设备日志。 |
| `adb -s <设备序列号> reboot` | 重启指定设备。 |
| `adb -s <设备序列号> shell` | 进入指定设备的命令行环境。 |

当同时连接手机和眼镜时，建议先执行：

```bash
adb devices
```

确认设备序列号后，再用 `-s <设备序列号>` 指定目标设备。例如：

```bash
adb -s 190xxxxxxxx install glassdemo.apk
```

如果 `adb devices` 看不到眼镜设备，请优先检查：

- 是否使用了 Glass3 数据调试线，而不是普通充电线。
- 眼镜和电脑连接是否稳定。
- Android Studio 或系统是否已经安装 Platform-Tools。
- 设备是否处于可被调试识别的状态。

## 调试与投屏工具：scrcpy

`scrcpy` 是一个开源的 Android 设备投屏和控制工具。开发 Glass3 眼镜端应用时，建议配合 **Glass3 数据调试线** 使用，用于把眼镜画面实时投到电脑上，方便确认应用是否安装成功、页面是否正常显示、交互是否生效。

常用用途：

- 查看眼镜端 Demo 或业务 App 的实时画面。
- 辅助排查眼镜端页面、交互、权限弹窗和运行状态。
- 在演示或调试时，将眼镜画面展示到电脑屏幕上。

参考地址：

- GitHub 仓库：[https://github.com/Genymobile/scrcpy](https://github.com/Genymobile/scrcpy)
- Releases 下载：[https://github.com/Genymobile/scrcpy/releases](https://github.com/Genymobile/scrcpy/releases)
- 快速开始中的线材说明：[先确认线材和投屏工具](../getting-started/快速开始.md#_1-先确认线材和投屏工具)

> 使用 `scrcpy` 前，请先确认电脑可以通过 `adb devices` 识别到设备。如果眼镜只能充电但无法被 Android Studio 或 `adb` 识别，通常需要检查是否使用了 Glass3 数据调试线。

## 产品手册

### 灵眸产品使用手册企业版

<a href="/lingmou_manual.pdf" target="_blank">《灵眸产品使用手册企业版.pdf》</a>

## 工具脚本

以下脚本用于辅助投屏、重启和查看眼镜端运行状态。执行脚本前，请先确认 `adb devices` 可以识别到目标设备。

### 眼镜端投屏脚本

```bash
#!/bin/bash
# scrcpy_auto.sh
# 简化的系统监控脚本

# 颜色定义
RED='\033[0;31m'
YELLOW='\033[1;33m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
PURPLE='\033[0;35m'
NC='\033[0m'
BOLD='\033[1m'

# 开始时间
START_TIME=$(date +%s)
# 计数器
COUNTER=0

DEVICE=$(adb devices | grep -E '^190[0-9a-zA-Z]+\s+device' | head -1 | awk '{print $1}')

if [ -z "$DEVICE" ]; then
    echo -e "${RED}错误: 未找到连接的设备${NC}"
    exit 1 # 退出整个脚本
fi

  
  echo -e "${GREEN}     监控设备: $DEVICE${NC}     "
  echo -e "${YELLOW}${BOLD}======================================="

scrcpy -s $DEVICE 
```



### 手机端投屏脚本

```bash
#!/bin/bash
# scrcpy_auto.sh
# 简化的系统监控脚本

# 颜色定义
RED='\033[0;31m'
YELLOW='\033[1;33m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
PURPLE='\033[0;35m'
NC='\033[0m'
BOLD='\033[1m'

# 开始时间
START_TIME=$(date +%s)
# 计数器
COUNTER=0

DEVICE=$(adb devices \
  | grep -Ev '^190[0-9a-zA-Z:]*\s+device' \
  | grep 'device$' \
  | head -1 \
  | awk '{print $1}')


if [ -z "$DEVICE" ]; then
    echo -e "${RED}错误: 未找到连接的设备${NC}"
    exit 1 # 退出整个脚本
fi

  
  echo -e "${GREEN}     监控设备: $DEVICE${NC}     "
  echo -e "${YELLOW}${BOLD}======================================="

scrcpy -s $DEVICE 
```

### 眼镜端重启脚本

```bash
#!/bin/bash
# scrcpy_auto.sh
# 简化的系统监控脚本

# 颜色定义
RED='\033[0;31m'
YELLOW='\033[1;33m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
PURPLE='\033[0;35m'
NC='\033[0m'
BOLD='\033[1m'

# 开始时间
START_TIME=$(date +%s)
# 计数器
COUNTER=0

DEVICE=$(adb devices | grep -E '^190[0-9a-zA-Z]+\s+device' | head -1 | awk '{print $1}')

if [ -z "$DEVICE" ]; then
    echo -e "${RED}错误: 未找到连接的设备${NC}"
    exit 1 # 退出整个脚本
fi

  
  echo -e "${GREEN}     重启设备: $DEVICE${NC}     "
  echo -e "${YELLOW}${BOLD}======================================="

adb -s $DEVICE  reboot
```



### 眼镜cpu与内存监控脚本

```bash
#!/bin/bash
# system_monitor_simple.sh
# 简化的系统监控脚本

# 颜色定义
RED='\033[0;31m'
YELLOW='\033[1;33m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
PURPLE='\033[0;35m'
NC='\033[0m'
BOLD='\033[1m'

# 开始时间
START_TIME=$(date +%s)
# 计数器
COUNTER=0

# 主监控循环
while true; do
  # 自动选择190设备，如果没有则选择第一个设备
  DEVICE=$(adb devices | grep -E '^190[0-9a-zA-Z]+\s+device' | head -1 | awk '{print $1}')
  if [ -z "$DEVICE" ]; then
    DEVICE=$(adb devices | grep -E '^[0-9a-zA-Z:]+\s+device' | head -1 | awk '{print $1}')
  fi

  if [ -z "$DEVICE" ]; then
    echo -e "${RED}错误: 未找到连接的设备${NC}"
    exit 1 # 退出整个脚本
  fi

  TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')

  COUNTER=$((COUNTER + 1))

  # 计算运行时长
  CURRENT_TIME=$(date +%s)
  ELAPSED_TIME=$((CURRENT_TIME - START_TIME))

  # 转换为时分秒
  HOURS=$((ELAPSED_TIME / 3600))
  MINUTES=$(((ELAPSED_TIME % 3600) / 60))
  SECONDS=$((ELAPSED_TIME % 60))

  # 1. 获取CPU温度
  CPU_TEMP_RAW=$(adb -s "$DEVICE" shell "cat /sys/class/thermal/thermal_zone0/temp 2>/dev/null || echo '0'")
  CPU_TEMP=$((CPU_TEMP_RAW / 1000))

  # 2. 获取内存信息
  MEM_DATA=$(adb -s "$DEVICE" shell "
        mem_total=\$(grep MemTotal /proc/meminfo | awk '{print \$2}');
        mem_avail=\$(grep MemAvailable /proc/meminfo | awk '{print \$2}');
        if [ -n \"\$mem_total\" ] && [ -n \"\$mem_avail\" ]; then
            mem_usage=\$((100 - (mem_avail * 100 / mem_total)));
            echo \"\$(echo \"scale=1; \$mem_total/1024\" | bc) \$(echo \"scale=1; \$mem_avail/1024\" | bc) \$mem_usage\";
        else
            echo \"0 0 0\";
        fi
    ")

  # 解析内存数据
  read MEM_TOTAL_MB MEM_AVAIL_MB MEM_USAGE <<<"$MEM_DATA"

  # 3. 获取CPU频率
  CPU_FREQ=$(adb -s "$DEVICE" shell "cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq 2>/dev/null || echo '0'")
  CPU_FREQ_MHZ=$((CPU_FREQ / 1000))

  # 确定颜色
  if [ $CPU_TEMP -ge 70 ]; then
    TEMP_COLOR=$RED
    TEMP_STATUS="[危险]"
  elif [ $CPU_TEMP -ge 60 ]; then
    TEMP_COLOR=$RED
    TEMP_STATUS="[高温]"
  elif [ $CPU_TEMP -ge 50 ]; then
    TEMP_COLOR=$YELLOW
    TEMP_STATUS="[中温]"
  else
    TEMP_COLOR=$GREEN
    TEMP_STATUS="[正常]"
  fi

  if [ $(echo "$MEM_USAGE >= 90" | bc) -eq 1 ]; then
    MEM_COLOR=$RED
    MEM_STATUS="[危险]"
  elif [ $(echo "$MEM_USAGE >= 80" | bc) -eq 1 ]; then
    MEM_COLOR=$RED
    MEM_STATUS="[高负载]"
  elif [ $(echo "$MEM_USAGE >= 60" | bc) -eq 1 ]; then
    MEM_COLOR=$YELLOW
    MEM_STATUS="[中负载]"
  else
    MEM_COLOR=$GREEN
    MEM_STATUS="[正常]"
  fi

  echo -e "${PURPLE}${BOLD}======================================="
  echo -e "${PURPLE}${BOLD}     系统监控 (${TIMESTAMP})     "

  echo -e "${GREEN}     监控设备: $DEVICE${NC}     "
  echo -e "${GREEN}     第${COUNTER} 次检查  ${HOURS}小时${MINUTES}分钟${SECONDS}秒"
  echo -e "${PURPLE}${BOLD}======================================="
  echo ""

  # CPU信息
  echo -e "${CYAN}${BOLD}[CPU信息]${NC}"
  echo -e "  频率: ${GREEN}${CPU_FREQ_MHZ} MHz${NC}"
  echo -e "  温度: ${TEMP_COLOR}${CPU_TEMP}°C ${TEMP_STATUS}${NC}"
  echo ""

  # 内存信息
  echo -e "${CYAN}${BOLD}[内存信息]${NC}"
  echo -e "  使用率: ${MEM_COLOR}${MEM_USAGE}% ${MEM_STATUS}${NC}"
  echo -e "  可用内存: ${GREEN}${MEM_AVAIL_MB} MB${NC}   总内存: ${BLUE}${MEM_TOTAL_MB} MB${NC}"
  echo ""


  echo -e "${YELLOW}按 Ctrl+C 停止监控${NC}"
  echo ""

  sleep 1
done
```


