跳转至正文

ADB 安装 APK:命令、参数与故障排查

使用 adb install path/to/app.apk 安装 APK。启用 USB 调试,通过 adb devices 验证,使用 -r -d -g -t 标志,Wi-Fi 安装,拆分 APK,启动,卸载,并修复常见错误信息。

ADB 安装 APK 命令、参数及故障排除 Capgo 博客

快速回答: 通过 USB 连接已开启 USB 调试的手机,并使用以下命令确认: adb devices,然后运行 adb install path/to/app.apk。若要覆盖现有安装进行更新,请使用 adb install -r path/to/app.apk.

adb install path/to/app.apk
adb install -r path/to/app.apk

最小步骤:

  1. 安装 SDK 平台工具 并确保 adb 已添加到 PATH 中。
  2. 在手机上启用 开发者选项和 USB 调试.
  3. 连接 USB,解锁手机,接受 允许 USB 调试.
  4. 运行 adb devices 并确认序列号显示 device,而不是 unauthorized.
  5. 运行 adb install path/to/app.apk.

如果你从 Capacitor 或 Ionic 发布 Android 构建,这个流程可以让你在硬件上安装最新的 APK,而无需等待 Play Console。测试后的商店发布,请参阅 Google Play 分阶段发布.

目录

安装 Platform Tools 并验证 adb

你不需要下载完整的 Android Studio 来 adb install。你需要 平台工具 由 Google 提供。

  1. 下载适用于你操作系统的 Platform Tools。
  2. 解压到一个固定文件夹。
  3. 将该文件夹添加到 PATH 中。

验证:

adb version

在设备上,按照 Android 开发者选项指南开启 USB 调试。部分厂商定制系统(常见如小米 MIUI)还需要 通过 USB 安装 或开发者设置中的类似选项。

使用数据线。仅充电线会导致 adb devices 列表并浪费时间。

adb install apk 核心工作流

安装前务必检查连接。

adb devices

预期的正常输出:

List of devices attached
XXXXXXXX    device

安装:

adb install path/to/your-app.apk

包含空格的路径请加引号。从 APK 目录执行:

adb install app-debug.apk

成功运行时通常会打印 正在执行流式安装 以及 成功。在底层, adb install 将文件推送到 /data/local/tmp,运行 pm install,并删除临时文件。这比手动操作更简单 adb push 加一个 shell pm install 用于日常测试。

关于 ADB 之外的 Capacitor 环境配置,请参阅 Capacitor 应用的 Android 配置.

adb install 标志

参数 含义 使用场景
-r 替换现有应用,尽可能保留数据 调试重建,包名相同
-d 仅允许在可调试应用上降级 将调试构建回滚到更新的调试构建之上
-g 安装时授予所有运行时权限 当权限阻止启动时,加快 QA 速度
-t 允许仅限测试的 APK 来自 CI 的内部 testOnly 构建

常见组合:

adb install -r app-debug.apk
adb install -r -g app-debug.apk
adb install -r -d older-build.apk
adb install -r -t internal-test.apk

-r 是迭代开发的默认习惯。如果没有它,Android 通常会返回 INSTALL_FAILED_ALREADY_EXISTS 当包已存在时。

-d 仅当已安装的包可调试时才允许降级。它不会从 Play 降级非可调试的发布版。如果没有 -d,较低的 versionCode 会触发 INSTALL_FAILED_VERSION_DOWNGRADE.

-g 会跳过安装时的权限对话框,但这不代表可以省去在干净安装环境下测试权限流程。

-t 当 manifest 设置了 android:testOnly="true"时是必需的。否则会出现 INSTALL_FAILED_TEST_ONLY.

Release 构建必须使用一致的签名。如果你生成了新的上传密钥, Android keystore 生成器 文档中记录了指纹和 PKCS#12 输出。使用与已安装应用不同的密钥签名会导致 INSTALL_FAILED_UPDATE_INCOMPATIBLE.

使用 -s 指定多个设备

当连接了多个设备或模拟器时, adb install 可能会失败并报错: 检测到多个设备/模拟器。列出序列号:

adb devices

用以下命令指定单个序列号: -s:

adb -s SERIAL install -r app-debug.apk

替换 SERIAL 使用第一列中的值 adb devices.

通过 Wi-Fi 安装 APK

Android 11 及更高版本(无线调试):

将手机和电脑连接到同一 Wi-Fi 网络。

  1. 在手机上: 设置 → 开发者选项 → 无线调试 → 使用配对码配对设备 code。记下配对 IP、端口和六位 code。
  2. 在电脑上执行配对:
adb pair IP:PAIRING_PORT

提示时输入配对 code。

  1. 连接到无线调试屏幕上显示的调试端口:
adb connect IP:DEBUG_PORT
adb devices
  1. 如果同时出现 USB 和 Wi-Fi 设备,请拔掉 USB 线 adb devices,或明确指定 Wi-Fi 目标:
adb -s IP:DEBUG_PORT install -r app-debug.apk

旧版 Android(优先使用 USB):

adb tcpip 5555
adb connect PHONE_IP:5555

在 adb devices 显示 TCP 端点后拔掉 USB。企业局域网中的防火墙和网络隔离可能会阻止 Wi-Fi ADB。

使用 install-multiple 安装 Split APK

Play Store 应用包会解包为 基础 APK 加上配置拆分 (密度、ABI、语言)以及有时是安装时功能模块。在一条命令中安装基础 APK 和所有匹配目标设备的拆分:

adb install-multiple -r base.apk split_config.xxhdpi.apk split_config.arm64_v8a.apk

仅传递来自同一 bundle 提取且适配已连接设备的拆分。缺失或错误的拆分会导致 INSTALL_FAILED_INVALID_APK 或安装不完整。

要从 .apks 归档中侧载, bundletool install-apks --apks=app.apks 通常比手动列出文件更简单。

这与 ABI 拆分 APK 不同,后者是 Gradle 为每种架构(app-armeabi-v7a-debug.apk, app-arm64-v8a-debug.apk等)构建独立的完整 APK。每个文件都是完整应用。选择与设备 CPU 匹配的那个,然后对 adb install -r 该单个文件执行操作。不要将输出文件夹中的所有 APK 都传给 install-multiple.

安装后启动应用

已知启动器 Activity (来自 AndroidManifest.xml):

adb shell am start -n com.example.app/.MainActivity

快速冒烟测试 如果你只知道包名:

adb shell monkey -p com.example.app -c android.intent.category.LAUNCHER 1

monkey 会触发一次启动 intent。这不是完整的 UI 测试,但可以确认应用安装后能正常打开。

查看日志:

adb logcat

使用 adb 卸载

按包名移除(而非 APK 路径):

adb uninstall com.example.app

这会移除应用及其数据。适用于首次启动测试以及修复签名不匹配之前。

若要移除应用但保留设备上的用户数据:

adb uninstall -k com.example.app

-k 可能导致下次安装复用旧的偏好设置或数据库,因此需要真正干净安装时请跳过。使用 adb install -r 仅当需要在现有安装上进行更快的更新循环时。

Capacitor 示例

典型的 Capacitor 循环:

npx cap sync android

构建调试版 APK,然后:

adb install -r android/app/build/outputs/apk/debug/app-debug.apk

使用您的 上传密钥 在上传到 Play 之前。使用 Play App Signing 时,商店下载使用的是 Google 的 应用签名证书,它可能与你的上传证书不同。只有当 APK 证书与已安装应用匹配且符合常规更新规则时,才能通过 ADB 更新。卸载前请对比签名证书。如果两者不同,请使用内部测试轨道的 APK(与 Play 构建签名方式相同)进行测试,而不是本地上传签名的文件。卸载 Play 构建会删除应用数据。

排查安装错误

错误或症状 可能原因 可尝试的操作
unauthorized 中的 adb devices RSA 提示未被接受 解锁手机,批准 USB 调试, adb kill-server 然后 adb start-server
no devices/emulators found 数据线、驱动或调试未开启 新数据线,启用 USB 调试,必要时安装 Windows Google USB 驱动
INSTALL_FAILED_ALREADY_EXISTS 相同的包,但没有 -r adb install -r app.apk 或 adb uninstall 首先
INSTALL_FAILED_UPDATE_INCOMPATIBLE 不同的签名密钥 卸载旧应用,或安装使用相同密钥签名的构建版本
INSTALL_FAILED_VERSION_DOWNGRADE 在非可调试应用上降低了 versionCode 卸载、提升版本号,或使用 -d 仅适用于可调试包
INSTALL_FAILED_INSUFFICIENT_STORAGE 磁盘空间不足 释放设备空间,删除未使用的应用
INSTALL_FAILED_TEST_ONLY testOnly APK adb install -t app.apk 仅限受信任的测试构建
INSTALL_FAILED_INVALID_APK 损坏或错误的 split 集 重新构建 APK,将所有 splits 传递给 install-multiple
more than one device/emulator 连接了多个目标设备 adb -s SERIAL install ...

设备未授权

adb devices 显示:

XXXXXXXX    unauthorized

在手机上修复,而不仅仅是在终端中:

  1. 重新插入 USB 并关闭锁屏。
  2. 点击 允许 开启 允许 USB 调试吗?
  3. 查看 始终允许来自此计算机 用于你的开发机。
  4. 重启 ADB:
adb kill-server
adb start-server
adb devices

未找到设备/模拟器

  • 确认已开启 USB 调试(参见 开发者选项).
  • 尝试更换 USB 端口和线缆。
  • 在 Windows 上,如果缺少 OEM 驱动,请从 SDK 管理器安装 Google USB 驱动。
  • 对于模拟器,请先启动 AVD 再执行 adb install.

安装失败:更新版本不兼容

已安装的应用签名证书与你推送的 APK 不同。常见于混用 debug 和 release、Play App Signing 持有的密钥与上传 APK 的密钥不一致,或密钥轮换之后。

首先确认你安装的 build 与设备上的应用使用相同证书签名。需要匹配生产安装时,请使用 Play 测试轨道的 APK。

如果必须替换安装,卸载会删除应用数据。先备份所需内容,然后:

adb uninstall com.example.app
adb install app.apk

INSTALL_FAILED_VERSION_DOWNGRADE

APK versionCode 版本低于已安装版本。

仅适用于可调试包,用于有意回滚测试:

adb install -r -d older.apk

对于 Play 的 release build,请先卸载或提高 versionCode 而不是使用 -d.

INSTALL_FAILED_INSUFFICIENT_STORAGE

设备无法为包分配空间。请删除应用或媒体文件后重试。低存储测试手机上安装超大 APK 时经常遇到此问题。

INSTALL_FAILED_TEST_ONLY

该 build 被标记为仅限测试。对于你自己的 CI 产物:

adb install -t -r app.apk

请勿使用 -t 以侧载方式安装不受信任的 APK。


对于需要修复 JavaScript、样式和配置,且无需等待商店审核的 Capacitor 团队, Capgo 支持签名 Live Update、渠道管理和回滚,与原生商店发布并行。

为 Capacitor 应用提供 Live Updates

当 Web 层出现线上 Bug 时,通过 Capgo 发布修复,而不用等 App Store 审核好几天。用户会在后台收到更新,原生变更则仍走正常审核流程。

博客最新动态

Capgo 为你提供打造真正专业的移动应用所需的最有价值的洞察。