1. 引言
在 Android 开发的世界里,图形化的 Android Studio 无疑是强大的主力工具。然而,对于追求效率、自动化构建、持续集成(CI/CD)以及深入理解构建系统的开发者来说,掌握 Android 命令行工具(CLI)是通往更高阶技能的必经之路。
本指南将带你从零开始,全面掌握 Android 开发中不可或缺的命令行工具,包括adb、dumpsys、pm、am、screencap、logcat等,并深入讲解如何利用 Gradle 和 SDK Manager 在无图形界面的环境下完成完整的开发与调试流程。
2. 环境准备:搭建你的 Android CLI 工具箱
在开始之前,你需要确保电脑上安装了必要的命令行工具。
2.1 安装 Android SDK 命令行工具
下载命令行工具:访问 Android 开发者官网,下载适用于你操作系统的“命令行工具”。
解压并配置:将下载的
commandlinetools-*压缩包解压到一个目录,例如~/Android/cmdline-tools。使用
sdkmanager:通过sdkmanager安装所需的 SDK 组件。# 查看可用包./sdkmanager--list# 安装指定版本的平台工具和构建工具./sdkmanager"platform-tools""platforms;android-34""build-tools;34.0.0"# 安装 NDK(用于原生开发)./sdkmanager"ndk;25.2.9519653"
2.2 配置环境变量
为了方便在任何路径下使用这些工具,需要将它们添加到系统的PATH环境变量中。
# 编辑你的 shell 配置文件(如 ~/.bashrc, ~/.zshrc)exportANDROID_HOME=$HOME/AndroidexportPATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/binexportPATH=$PATH:$ANDROID_HOME/platform-toolsexportPATH=$PATH:$ANDROID_HOME/emulator# 使配置生效source~/.zshrc3. 核心工具详解:adb(Android Debug Bridge)
adb是 Android CLI 的灵魂,它充当着电脑与 Android 设备(真机或模拟器)之间的通用调试桥梁。
3.1 设备连接与管理
# 查看已连接的设备列表adb devices# 连接一个设备(通过 TCP/IP,常用于无线调试)adb connect192.168.1.100:5555# 断开指定设备adb disconnect192.168.1.100:5555# 在有多个设备时,指定操作某个设备adb-semulator-5554 shell3.2 安装与卸载应用
# 安装 APKadbinstallapp-debug.apk# 安装并保留数据和缓存(用于覆盖安装测试)adbinstall-rapp-debug.apk# 卸载应用(需要指定包名)adb uninstall com.example.myapp# 卸载但保留数据和缓存目录adb uninstall-kcom.example.myapp3.3 文件传输
# 从电脑推送文件到设备adb push local_file.txt /sdcard/Download/# 从设备拉取文件到电脑adb pull /sdcard/Download/remote_file.txt.# 拉取整个目录adb pull /sdcard/Download/ ./local_download/3.4 进入 Shell 环境
adb shell是通往 Android 系统内部的钥匙,可以执行 Linux 命令。
# 进入交互式 Shelladb shell# 直接执行单条命令adb shellls/sdcard/ adb shell dumpsys battery4. 系统信息与调试:dumpsys & dumpsys
dumpsys是 Android 系统服务的诊断工具,可以获取几乎所有系统状态信息。
4.1 常用 dumpsys 命令
# 获取电池状态adb shell dumpsys battery# 获取当前 Activity 栈信息(了解哪个 Activity 在前台)adb shell dumpsys activity activities|grepmResumedActivity# 获取网络连接信息adb shell dumpsys connectivity# 获取窗口信息(分辨率、密度等)adb shell dumpsys window displays# 获取所有正在运行的服务列表adb shell dumpsys-l4.2 使用 dumpsys 进行性能分析
# 获取 CPU 使用信息adb shell dumpsys cpuinfo# 获取内存使用信息(按进程)adb shell dumpsys meminfo# 获取指定应用的内存信息adb shell dumpsys meminfo com.example.myapp# 获取 GPU 渲染性能adb shell dumpsys gfxinfo com.example.myapp5. 应用管理:pm(Package Manager)
pm命令用于管理设备上的应用包。
# 列出所有已安装的应用包adb shell pm list packages# 列出包含特定关键词的应用adb shell pm list packages|grepgoogle# 列出第三方应用adb shell pm list packages-3# 查看应用的详细信息(安装路径、权限等)adb shell pm dump com.example.myapp# 清除应用数据adb shell pmclearcom.example.myapp# 禁用/启用应用adb shell pm disable-user--user0com.example.myapp adb shell pmenablecom.example.myapp6. 模拟用户操作:am(Activity Manager)
am命令可以模拟启动 Activity、发送广播、启动服务等操作。
# 启动一个 Activity(通过 Intent)adb shell am start-ncom.example.myapp/.MainActivity# 启动 Activity 并传递数据adb shell am start-ncom.example.myapp/.DetailActivity--es"key""value"# 发送一个广播adb shell am broadcast-aandroid.intent.action.BOOT_COMPLETED# 启动一个服务adb shell am startservice-ncom.example.myapp/.MyService# 强制停止一个应用adb shell am force-stop com.example.myapp7. 屏幕与输入操作
7.1 截屏与录屏
# 截屏并保存到电脑adb shell screencap /sdcard/screenshot.png adb pull /sdcard/screenshot.png.# 录屏(默认 180 秒,4Mbps)adb shell screenrecord /sdcard/demo.mp4# 录屏并指定参数adb shell screenrecord--size720x1280 --bit-rate 2M --time-limit30/sdcard/demo.mp47.2 模拟输入
# 模拟点击(x, y 坐标)adb shell input tap5001000# 模拟滑动adb shell input swipe5001000500500# 模拟输入文本adb shell input text"Hello World"# 模拟按键(如返回键、Home 键)adb shell input keyevent KEYCODE_BACK adb shell input keyevent KEYCODE_HOME adb shell input keyevent KEYCODE_MENU8. 日志查看:logcat
logcat是 Android 日志系统的核心工具,用于查看应用和系统的运行日志。
8.1 基本用法
# 实时查看所有日志adb logcat# 清空之前的日志adb logcat-c# 将日志输出到文件adb logcat-d>app_log.txt8.2 过滤日志
# 按日志级别过滤(V, D, I, W, E, F, S)adb logcat *:E# 按标签过滤adb logcat-sMyAppTag# 组合过滤:只显示 MyAppTag 的 Error 级别日志adb logcat-sMyAppTag:E# 使用 grep 进行更灵活的过滤adb logcat|grep-i"error"adb logcat|grep"com.example.myapp"8.3 格式化输出
# 显示详细的时间、PID、TID 等信息adb logcat-vlong# 显示线程时间adb logcat-vthreadtime# 显示彩色输出(便于区分不同级别)adb logcat-vcolor9. 无线调试(ADB over Wi-Fi)
摆脱数据线的束缚,让调试更加自由。
# 1. 先用 USB 连接设备# 2. 让设备在 5555 端口监听 TCP/IP 连接adb tcpip5555# 3. 断开 USB 线# 4. 通过 IP 地址连接设备adb connect192.168.1.100:5555# 5. 现在可以无线使用 adb 了adb devices adb shell# 6. 断开无线连接adb disconnect192.168.1.100:555510. 自动化构建:Gradle Wrapper
在 CI/CD 环境中,通常使用 Gradle Wrapper(gradlew)来执行构建任务。
# 查看项目中的 Gradle 任务./gradlew tasks# 构建 Debug APK./gradlew assembleDebug# 构建 Release APK./gradlew assembleRelease# 运行所有测试./gradlewtest# 运行指定模块的测试./gradlew :app:testDebugUnitTest# 清理构建产物./gradlew clean# 构建并安装 Debug APK 到连接的设备./gradlew installDebug11. 实战案例:自动化测试脚本
结合以上命令,可以编写一个简单的自动化测试脚本。
#!/bin/bash# auto_test.shPACKAGE_NAME="com.example.myapp"APK_PATH="./app/build/outputs/apk/debug/app-debug.apk"echo"=== 开始自动化测试 ==="# 1. 安装应用echo"1. 安装应用..."adbinstall-r$APK_PATH# 2. 启动应用echo"2. 启动应用..."adb shell am start-n$PACKAGE_NAME/.MainActivity# 3. 等待 3 秒sleep3# 4. 模拟用户操作echo"3. 模拟点击..."adb shell input tap300500sleep1# 5. 截屏echo"4. 截屏..."adb shell screencap /sdcard/test_screenshot.png adb pull /sdcard/test_screenshot.png.# 6. 获取日志echo"5. 获取日志..."adb logcat-d-sMyAppTag>test_log.txt# 7. 卸载应用echo"6. 卸载应用..."adb uninstall$PACKAGE_NAMEecho"=== 测试完成 ==="12. 总结与进阶学习
通过本指南,你已经掌握了 Android CLI 的核心工具和常用命令。这些技能不仅能提升你的日常开发效率,更是构建自动化工作流、进行深度性能分析和系统级调试的基石。
进阶学习方向:
- 深入 Gradle:学习编写自定义 Gradle Task,实现更复杂的构建逻辑。
- Monkey 测试:使用
adb shell monkey进行压力测试和随机测试。 - Systrace / Perfetto:学习使用更高级的性能分析工具进行 UI 和 CPU 分析。
- 编写 Shell 脚本:将常用的 CLI 操作组合成脚本,打造自己的自动化工具链。
现在,打开你的终端,开始探索 Android CLI 的强大世界吧!