Troubleshooting - langningchen/miniapp GitHub Wiki

常见问题解决

本指南收集了开发过程中最常见的问题及其详细解决方案,帮助您快速排除故障,提高开发效率。

🎯 问题分类

问题按以下类别整理:

  • 🔧 环境配置问题 - 系统、工具安装相关
  • 📦 编译构建问题 - 代码编译、打包相关
  • 📱 设备连接问题 - ADB、设备通信相关
  • 🌐 网络相关问题 - 下载、连接、代理相关
  • 🚀 部署运行问题 - 应用安装、运行相关

🔧 环境配置问题

WSL 相关问题

问题1:WSL 安装失败或无法启动

# 症状:安装 WSL 时出错或无法启动

解决方案

# 1. 检查 Windows 版本
winver  # 确保是 Windows 10 2004+ 或 Windows 11

# 2. 启用虚拟化功能
# 进入 BIOS,启用 Virtualization Technology

# 3. 重新启用 WSL 功能
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

# 4. 重启计算机后重试
wsl --install -d Ubuntu-22.04

问题2:WSL2 中无法访问 Windows 文件

# 症状:在 WSL2 中无法看到 Windows 文件系统

解决方案

# Windows 文件系统挂载在 /mnt/ 下
ls -la /mnt/c/Users/

# 如果看不到,手动挂载
sudo mkdir -p /mnt/c
sudo mount -t drvfs C: /mnt/c

# 永久挂载,编辑 /etc/fstab
echo "C: /mnt/c drvfs defaults 0 0" | sudo tee -a /etc/fstab

Ubuntu 系统问题

问题3:apt update 失败

# 症状:E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

解决方案

# 1. 检查网络连接
ping -c 4 8.8.8.8

# 2. 重置 APT 缓存
sudo rm -rf /var/lib/apt/lists/*
sudo apt clean
sudo apt update

# 3. 修复损坏的包
sudo apt --fix-broken install

# 4. 换用国内镜像源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
sudo sed -i 's/http:\/\/archive.ubuntu.com/https:\/\/mirrors.aliyun.com/g' /etc/apt/sources.list
sudo apt update

问题4:磁盘空间不足

# 症状:No space left on device

解决方案

# 1. 检查磁盘使用情况
df -h
du -sh /* 2>/dev/null | sort -hr | head -10

# 2. 清理系统缓存
sudo apt clean
sudo apt autoremove
sudo apt autoclean

# 3. 清理日志文件
sudo journalctl --disk-usage
sudo journalctl --vacuum-time=3d

# 4. 清理临时文件
sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*

# 5. 清理包缓存
sudo rm -rf /var/cache/apt/archives/*.deb

📦 编译构建问题

NodeJS/npm 问题

问题5:npm install 失败

# 症状:npm ERR! network timeout / EACCES / ENOTFOUND

解决方案

# 1. 清理 npm 缓存
npm cache clean --force
rm -rf node_modules package-lock.json

# 2. 换用国内镜像源
npm config set registry https://registry.npmmirror.com

# 3. 增加超时时间
npm config set timeout 300000

# 4. 解决权限问题
sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}

# 5. 使用 yarn 或 pnpm 替代
npm install -g pnpm
pnpm install

问题6:Node.js 版本不兼容

# 症状:engine "node" is incompatible

解决方案

# 1. 安装 NVM 管理多版本
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
source ~/.bashrc

# 2. 安装和切换 Node.js 版本
nvm install 18
nvm use 18
nvm alias default 18

# 3. 验证版本
node --version
npm --version

CMake 编译问题

问题7:CMake 找不到编译器

# 症状:CMake Error: CMAKE_CXX_COMPILER not set

解决方案

# 1. 安装编译工具
sudo apt install build-essential cmake

# 2. 检查编译器路径
which gcc
which g++

# 3. 手动指定编译器
export CC=/usr/bin/gcc
export CXX=/usr/bin/g++

# 4. 清理 CMake 缓存重新配置
rm -rf jsapi/build
mkdir -p jsapi/build
cd jsapi/build
cmake ..

问题8:交叉编译工具链找不到

# 症状:Could not find ARM toolchain

解决方案

# 1. 检查工具链目录
ls -la jsapi/toolchains/

# 2. 验证工具链可执行性
file jsapi/toolchains/armv7-eabihf--glibc--stable-2018.11-1/bin/arm-buildroot-linux-gnueabihf-gcc
chmod +x jsapi/toolchains/armv7-eabihf--glibc--stable-2018.11-1/bin/*

# 3. 检查工具链配置
cat jsapi/toolchain.cmake

# 4. 手动设置工具链路径
export PATH="$PWD/jsapi/toolchains/armv7-eabihf--glibc--stable-2018.11-1/bin:$PATH"

问题9:链接库找不到

# 症状:cannot find -lcurl, -lsqlite3

解决方案

# 1. 检查库文件是否存在
ls -la jsapi/lib/
file jsapi/lib/libcurl.so
file jsapi/lib/libsqlite3.so

# 2. 检查版本信息是否正确提取
tar -tf versionInfo.tar.gz | grep -E "(lib|include)"

# 3. 重新提取版本信息
rm -rf jsapi/include jsapi/lib
tar -xzf versionInfo.tar.gz -C ./jsapi

# 4. 检查 CMake 库路径配置
grep -r "lib" jsapi/CMakeLists.txt

📱 设备连接问题

ADB 连接问题

问题10:adb devices 显示 unauthorized

# 症状:List of devices attached
#       ABC123DEF456    unauthorized

解决方案

# 1. 重启 ADB 服务
adb kill-server
adb start-server

# 2. 在设备上重新授权
# 设备会弹出授权对话框,点击"总是允许"

# 3. 删除旧的授权密钥
rm ~/.android/adbkey*
adb kill-server
adb start-server

# 4. 检查 RSA 密钥
ls -la ~/.android/

问题11:设备连接不稳定

# 症状:设备时连时断,adb 命令经常失败

解决方案

# 1. 检查 USB 线和端口
# 更换 USB 数据线,尝试不同的 USB 端口

# 2. 检查设备电源管理
# 在设备上禁用 USB 选择性暂停

# 3. 增加 ADB 超时时间
export ADB_CONNECT_TIMEOUT_MS=10000

# 4. 使用网络 ADB
adb tcpip 5555
adb connect device_ip:5555

# 5. 监控连接状态
watch -n 1 'adb devices'

问题12:Linux 下 USB 权限问题

# 症状:no permissions (user in plugdev group)

解决方案

# 1. 创建 udev 规则
sudo tee /etc/udev/rules.d/51-android.rules << 'EOF'
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTR{idVendor}=="1004", MODE="0666", GROUP="plugdev"
EOF

# 2. 重新加载 udev 规则
sudo udevadm control --reload-rules
sudo udevadm trigger

# 3. 添加用户到 plugdev 组
sudo usermod -a -G plugdev $USER

# 4. 重新登录或运行
newgrp plugdev

# 5. 重启 ADB
adb kill-server
adb start-server

🌐 网络相关问题

下载问题

问题13:下载速度慢或超时

# 症状:wget/curl 下载很慢或超时

解决方案

# 1. 使用国内镜像源
# 参考 [网络问题和换源指南](Network-Issues-and-Mirror-Setup)

# 2. 使用多线程下载
sudo apt install aria2
aria2c -x 10 -s 10 https://example.com/file.tar.gz

# 3. 配置代理(如果有)
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890

# 4. 增加重试和超时设置
wget --tries=5 --timeout=30 --waitretry=10 url

问题14:SSL 证书验证失败

# 症状:SSL certificate problem: unable to get local issuer certificate

解决方案

# 1. 更新 CA 证书
sudo apt update
sudo apt install ca-certificates

# 2. 更新证书存储
sudo update-ca-certificates

# 3. 临时跳过验证(不推荐)
curl -k https://example.com
wget --no-check-certificate https://example.com

# 4. 检查系统时间
date
sudo ntpdate -s time.nist.gov  # 如果时间不对

代理相关问题

问题15:代理配置不生效

# 症状:设置了代理但仍无法访问外网

解决方案

# 1. 检查代理设置
env | grep -i proxy

# 2. 测试代理连接
curl --proxy http://127.0.0.1:7890 -I https://www.google.com

# 3. 为不同工具单独设置代理
git config --global http.proxy http://127.0.0.1:7890
npm config set proxy http://127.0.0.1:7890

# 4. 检查代理服务是否运行
netstat -tulpn | grep 7890

# 5. 配置绕过代理的地址
export no_proxy="localhost,127.0.0.1,.local"

🚀 部署运行问题

应用安装问题

问题16:miniapp_cli 命令不存在

# 症状:miniapp_cli: command not found

解决方案

# 1. 检查设备是否支持 miniapp
adb shell which miniapp_cli

# 2. 查找 miniapp_cli 位置
adb shell find /system -name "*miniapp*" 2>/dev/null

# 3. 添加到 PATH
adb shell "export PATH=/system/bin:$PATH"

# 4. 检查设备系统版本
adb shell getprop ro.build.version.release

# 5. 确认设备型号是否支持
adb shell getprop ro.product.model

问题17:应用安装失败

# 症状:installation failed: INSTALL_FAILED_INSUFFICIENT_STORAGE

解决方案

# 1. 检查设备存储空间
adb shell df -h

# 2. 清理设备存储
adb shell rm -rf /userdisk/cache/*
adb shell rm -rf /tmp/*

# 3. 检查应用包大小
ls -lh dist/miniapp.amr

# 4. 检查安装路径权限
adb shell ls -la /userdisk/Favorite/

# 5. 尝试不同的安装路径
adb push dist/miniapp.amr /sdcard/
adb shell miniapp_cli install /sdcard/miniapp.amr

运行时问题

问题18:应用启动后崩溃

# 症状:应用安装成功但启动后立即退出

解决方案

# 1. 查看崩溃日志
adb logcat -c
adb shell miniapp_cli launch com.miniapp.package
adb logcat -d | grep -E "(FATAL|ERROR|CRASH)"

# 2. 检查依赖库
adb shell ldd /path/to/miniapp/binary

# 3. 检查权限配置
adb shell ls -la /userdisk/miniapp/

# 4. 验证应用签名
adb shell dumpsys package com.miniapp.package | grep signature

# 5. 重新安装应用
adb shell miniapp_cli uninstall com.miniapp.package
adb shell miniapp_cli install /userdisk/Favorite/miniapp.amr

问题19:功能异常或无响应

# 症状:应用能启动但某些功能不工作

解决方案

# 1. 检查网络连接
adb shell ping -c 3 8.8.8.8

# 2. 查看应用日志
adb logcat -s "MiniApp:*" | head -50

# 3. 检查数据库文件
adb shell ls -la /userdisk/miniapp/*.db

# 4. 验证配置文件
adb shell cat /userdisk/miniapp/config.json

# 5. 重置应用数据
adb shell rm -rf /userdisk/miniapp/cache/
adb shell miniapp_cli restart com.miniapp.package

🔍 问题诊断工具

自动诊断脚本

创建 diagnose.sh 脚本:

#!/bin/bash
# 自动诊断脚本

echo "🔍 开始系统诊断..."

# 检查基本环境
echo "📋 环境检查..."
echo "系统: $(lsb_release -d | cut -d: -f2 | xargs)"
echo "内核: $(uname -r)"
echo "磁盘: $(df -h / | tail -1 | awk '{print $4}') 可用"

# 检查必需工具
echo "🛠️ 工具检查..."
tools=("git" "cmake" "gcc" "node" "npm" "pnpm" "adb")
for tool in "${tools[@]}"; do
    if command -v $tool &> /dev/null; then
        echo "✅ $tool: $(which $tool)"
    else
        echo "❌ $tool: 未安装"
    fi
done

# 检查网络连接
echo "🌐 网络检查..."
if ping -c 1 8.8.8.8 &> /dev/null; then
    echo "✅ 网络连接正常"
else
    echo "❌ 网络连接异常"
fi

# 检查设备连接
echo "📱 设备检查..."
device_count=$(adb devices | grep -c "device$")
if [ $device_count -gt 0 ]; then
    echo "✅ 发现 $device_count 个设备"
    adb devices
else
    echo "❌ 没有发现设备"
fi

# 检查项目结构
echo "📁 项目检查..."
if [ -f "package.json" ] || [ -f "CMakeLists.txt" ]; then
    echo "✅ 项目结构正常"
else
    echo "❌ 项目结构异常"
fi

echo "✅ 诊断完成"

日志收集脚本

创建 collect_logs.sh 脚本:

#!/bin/bash
# 日志收集脚本

LOG_DIR="logs_$(date +%Y%m%d_%H%M%S)"
mkdir -p $LOG_DIR

echo "📊 收集系统信息..."

# 系统信息
{
    echo "=== 系统信息 ==="
    lsb_release -a
    uname -a
    free -h
    df -h
} > $LOG_DIR/system_info.txt

# 环境变量
env > $LOG_DIR/environment.txt

# 网络配置
{
    echo "=== 网络配置 ==="
    cat /etc/resolv.conf
    echo "=== 路由表 ==="
    ip route
} > $LOG_DIR/network_config.txt

# 已安装包
dpkg -l > $LOG_DIR/installed_packages.txt

# Git 配置
git config --list > $LOG_DIR/git_config.txt

# npm 配置
npm config list > $LOG_DIR/npm_config.txt

# ADB 设备
adb devices > $LOG_DIR/adb_devices.txt

# 设备日志(如果有连接的设备)
if adb devices | grep -q "device$"; then
    adb logcat -d > $LOG_DIR/device_logcat.txt 2>/dev/null
fi

echo "✅ 日志已收集到 $LOG_DIR/"
tar -czf ${LOG_DIR}.tar.gz $LOG_DIR/
echo "📦 日志包: ${LOG_DIR}.tar.gz"

📞 获取帮助

在线资源

提交问题时的信息

请包含以下信息:

  • 操作系统版本
  • 使用的工具版本
  • 完整的错误信息
  • 重现问题的步骤
  • 已尝试的解决方案

社区交流

  • 在提问前请先搜索已有问题
  • 描述问题时尽量详细
  • 提供可重现的测试用例
  • 感谢帮助您的社区成员

还有其他问题? 请在 GitHub Issues 中提出,我们会尽快回复。