适用人群Android测试工程师、移动端QA、Android开发者、想深入掌握IDE测试工具链的测试人员阅读建议按章节顺序阅读每章可独立实操建议打开Android Studio边读边操作前置知识Android基础概念APK、Activity、ADB了解Java/Kotlin基本语法更好目录为什么测试人员需要掌握Android Studio环境搭建与项目准备Logcat日志分析与问题定位Debug调试断点与变量追踪Device Explorer文件与数据探查App Inspection数据库与网络实时监控Layout InspectorUI布局检查与适配验证Android Profiler性能分析四件套AVD模拟器多设备兼容性测试App Quality Insights崩溃与质量监控测试人员日常工作流实战常见问题排坑总结一、为什么测试人员需要掌握Android Studio1.1 测试工程师的真实困境场景一开发说你复现不了是因为环境问题 → 你只能靠截图和录屏描述 → 开发无法定位根因 场景二APP突然崩溃日志一闪而过 → 你不知道怎么抓崩溃堆栈 → 提交Bug被退回信息不全 场景三怀疑有内存泄漏但无法证明 → 你说用久了会卡 → 开发问内存增长曲线有吗 → 你沉默了 场景四某个页面在不同手机上显示异常 → 你只能手动截图 → 效率低覆盖不全1.2 Android Studio对测试人员的价值能力传统方式用Android Studio日志抓取开发帮忙导日志Logcat实时过滤一键导出崩溃分析复现→截图→猜原因堆栈跟踪变量状态一目了然数据库验证导出DB→用工具打开Database Inspector实时查看修改网络请求抓包工具配置代理Network Inspector直接监控内存泄漏感觉卡Memory Profiler精准定位UI适配买几十台手机AVD模拟器覆盖所有尺寸性能数据依赖开发提供Profiler自己采集CPU/内存/网络1.3 Android Studio测试工具全景图二、环境搭建与项目准备2.1 安装Android Studiobash# 1. 下载Android Studio # 官网https://developer.android.com/studio # 选择对应操作系统版本Windows/Mac/Linux # 2. 安装时选择 Standard 安装类型即可 # 关键组件Android SDK、Android SDK Platform-Tools、Android Emulator # 3. 首次启动后配置SDK # File → Settings → Appearance Behavior → System Settings → Android SDK # 至少安装一个SDK Platform推荐 API 34 或最新稳定版2.2 准备测试项目bash# 方式一打开已有的Android项目 # File → Open → 选择项目根目录 # 方式二创建新项目用于学习工具 # File → New → New Project → Empty Views Activity # 方式三直接安装APK调试不需要项目源码 # 用ADB安装APK后通过Logcat和Profiler附加到进程 adb install your_app.apk2.3 连接测试设备方式操作适用场景USB连接USB线连接 → 手机开启USB调试 → 弹窗授权稳定调试推荐Wi-Fi连接USB连一次 →adb tcpip 5555→adb connect IP:5555无线自由AVD模拟器Device Manager → Create Device → 选择配置 → 启动多设备覆盖bash# 验证设备连接 adb devices # 输出 # List of devices attached # emulator-5554 device ← AVD模拟器 # ABC123456789 device ← 真机2.4 工具窗口快速访问工具打开方式快捷键(Win)LogcatView → Tool Windows → LogcatAlt6ProfilerView → Tool Windows → Profiler—Device ExplorerView → Tool Windows → Device Explorer—App InspectionView → Tool Windows → App Inspection—Layout InspectorView → Tool Windows → Layout Inspector—TerminalView → Tool Windows → TerminalAltF12Running DevicesView → Tool Windows → Running Devices—三、Logcat日志分析与问题定位3.1 Logcat界面速览┌─────────────────────────────────────────────────────────┐ │ Logcat │ ├─────────────────────────────────────────────────────────┤ │ [设备选择▼] [进程选择▼] [日志级别▼] [搜索框 ] │ │ [regex] [过滤器配置] │ ├─────────────────────────────────────────────────────────┤ │ 07-13 09:08:15.123 12345 12345 D MainActivity: ... │ │ 07-13 09:08:15.456 12345 12345 E NetworkMgr: ... │ │ 07-13 09:08:15.789 12345 12345 W SQLiteLog: ... │ │ 07-13 09:08:16.012 12345 12345 I Choreographer:. │ │ 07-13 09:08:16.345 12345 12345 V OkHttp: ... │ │ ... │ └─────────────────────────────────────────────────────────┘日志格式解析2026-07-13 09:08:15.123 12345-12345 System.err com.example.app W NullPointerException 时间戳 PID-TID Tag PackageName 级别 内容3.2 日志级别与过滤级别缩写含义测试关注场景VerboseV最详细一般不需要DebugD调试信息开发调试用InfoI一般信息生命周期、状态变化WarnW警告潜在问题需要关注ErrorE错误必须关注崩溃、异常AssertA断言失败严重错误bash# 常用过滤操作 # 1. 按级别过滤点击顶部下拉选择 Error → 只看错误日志 # 2. 按Tag过滤搜索框输入 tag:NetworkMgr # 3. 按关键词过滤搜索框输入 Exception # 4. 正则过滤勾选Regex输入 (Error|Exception|Crash) # 5. 按包名过滤搜索框输入 package:com.example.app3.3 测试人员必会的Logcat场景场景一抓取崩溃堆栈操作步骤 1. 打开Logcat选择设备和进程 2. 日志级别设为 Error 3. 复现崩溃操作 4. 找到 FATAL EXCEPTION 开头的日志 5. 复制完整堆栈信息崩溃日志示例解读java// 崩溃堆栈示例 FATAL EXCEPTION: main Process: com.example.app, PID: 12345 java.lang.NullPointerException: Attempt to invoke virtual method void android.widget.TextView.setText(java.lang.CharSequence) on a null object reference at com.example.app.MainActivity.onCreate(MainActivity.java:42) // ↑ 崩溃位置MainActivity.java 第42行 at android.app.Activity.performCreate(Activity.java:8000) at android.app.Instrumentation.callActivityOnCreate(...) ... // 测试人员如何解读 // 1. 异常类型NullPointerException空指针 // 2. 崩溃线程main主线程 // 3. 崩溃位置MainActivity.java:42 → 打开源码确认 // 4. 原因setText被调用时TextView为null // → 提交Bug时附上此堆栈开发秒定位场景二过滤指定Tag的日志bash# 方法一搜索框直接输入 # 输入tag:OkHttp → 只看OkHttp网络请求日志 # 输入tag:SQLiteLog → 只看数据库操作日志 # 方法二创建自定义过滤器 # 点击Logcat右侧的过滤器下拉 → Edit Filter Configuration # Filter Name: 网络日志 # Log Tag: OkHttp|Retrofit|HttpLogging # Log Level: Debug # → 保存后一键切换场景三导出日志给开发bash# 方式一Logcat界面导出 # 选中日志 → 右键 → Export Selection to Text File # 方式二ADB命令行导出推荐信息更全 adb logcat -d crash_log.txt # 导出所有日志 adb logcat -d *:E crash_error_only.txt # 只导出Error级别 adb logcat -d -b crash crash_stack.txt # 只导出崩溃日志 adb logcat -d -v time log_with_time.txt # 带时间戳 # 方式三实时保存长时间监控 adb logcat -v threadtime continuous_log.txt # CtrlC 停止场景四清空日志后复现问题bash# 清空日志缓存排除干扰 adb logcat -c # 执行复现操作 # 导出刚产生的日志 adb logcat -d reproduce_log.txt3.4 Logcat实用技巧bash# 1. 关键词高亮 # Settings → Editor → Color Scheme → Logcat → 自定义颜色 # 2. 过滤崩溃日志最常用 # 搜索框输入FATAL EXCEPTION OR AndroidRuntime OR System.err # 3. 过滤ANR日志 # 搜索框输入ANR in OR Input dispatching timed out # 4. 过滤内存相关 # 搜索框输入OutOfMemory OR GC_ OR low memory # 5. 只看某个时间段 # 在Logcat中使用时间范围过滤器右上角下拉四、Debug调试断点与变量追踪4.1 为什么测试人员要学Debug场景不用Debug用Debug怀疑某个参数传错了让开发加日志重新打包断点看变量值秒确认接口返回数据异常截图给开发看断点查看完整Response精准描述条件分支没走到猜测反复测试条件断点直接验证数据流转过程不透明依赖开发解释自己跟踪调用栈4.2 断点类型与设置4.3 调试实战流程第一步设置断点 ↓ 第二步以Debug模式启动应用 ↓ (点击工具栏 图标或 ShiftF9) 第三步操作APP触发断点 ↓ 第四步使用Debug面板排查 ↓ 第五步继续执行或停止Debug面板核心功能4.4 测试场景实战验证接口返回数据场景测试登录接口怀疑返回的Token为空 操作步骤 1. 找到登录请求的响应处理代码 通常在 onResponse 或 Retrofit 的回调中 2. 在 response.body() 之后的代码行设置断点 3. Debug模式启动执行登录操作 4. 程序暂停在断点处 5. 查看 Variables 面板 ├── response.isSuccessful() true ← 请求成功 ├── response.code() 200 ← HTTP 200 ├── response.body().getToken() ← Token为空Bug确认 └── response.body().getMessage() 登录成功 6. 截图Variables面板 → 附到Bug单 7. 结论接口返回成功但Token字段为空 → 服务端Bug4.5 条件断点实战场景列表有100条数据只在第50条数据异常时暂停 操作 1. 在列表渲染代码行设置断点 2. 右键断点 → 输入条件 position 49 (或 item.getId() target_id) 3. Debug运行 4. 只有满足条件时才暂停不会被前49条数据打断五、Device Explorer文件与数据探查5.1 什么是Device ExplorerDevice Explorer是Android Studio内置的设备文件浏览器可以直接查看和操作设备/模拟器上的文件系统无需额外工具。5.2 测试必查的目录目录路径测试关注点数据库/data/data/包名/databases/验证数据是否正确写入、更新、删除SharedPreferences/data/data/包名/shared_prefs/验证配置/Token/用户偏好是否正确存储内部文件/data/data/包名/files/验证文件下载、日志文件缓存目录/data/data/包名/cache/验证缓存清理是否生效外部存储/sdcard/Android/data/包名/验证大文件、媒体文件存储截屏/录屏/sdcard/Pictures/或/sdcard/DCIM/验证截图保存路径5.3 实战操作操作一导出数据库文件步骤 1. 打开 Device Explorer 2. 导航到 /data/data/com.example.app/databases/ 3. 找到 .db 文件如 app_database.db 4. 右键 → Save As... → 保存到本地 5. 用 DB Browser for SQLite 或其他工具打开查看操作二查看SharedPreferences步骤 1. 导航到 /data/data/com.example.app/shared_prefs/ 2. 找到 .xml 文件如 UserPrefs.xml 3. 右键 → Save As... → 保存 4. 用文本编辑器打开直接查看键值对 示例内容 ?xml version1.0 encodingutf-8 standaloneyes ? map string nametokeneyJhbGciOiJIUzI1NiJ9.../string boolean nameisLogin valuetrue / string nameuserName张三/string int nameuserId value1001 / /map操作三验证缓存清理测试场景测试清除缓存功能是否真正生效 步骤 1. 使用APP一段时间产生缓存 2. 打开 Device Explorer → 进入 cache/ 目录 → 记录文件数量和大小 3. 在APP中执行清除缓存操作 4. 刷新 Device Explorer → 检查 cache/ 目录 5. 预期文件被清空或大小显著减小 6. 实际如果文件还在 → Bug操作四上传文件到设备场景测试文件导入功能需要准备测试文件 步骤 1. 在 Device Explorer 中导航到目标目录如 /sdcard/Download/ 2. 右键 → Upload... 3. 选择本地测试文件 4. 确认上传成功 → 在APP中测试导入功能六、App Inspection数据库与网络实时监控6.1 App Inspection 三件套App Inspection应用检查包含三个子工具 ┌────────────────────────────────────────────────┐ │ App Inspection │ ├────────────────────────────────────────────────┤ │ │ │ ┌──────────────────┐ ┌──────────────────┐ │ │ │ Database │ │ Network │ │ │ │ Inspector │ │ Inspector │ │ │ │ 数据库实时检查 │ │ 网络实时监控 │ │ │ └──────────────────┘ └──────────────────┘ │ │ │ │ ┌──────────────────────────────────────────┐ │ │ │ Background Task Inspector │ │ │ │ 后台任务实时检查 │ │ │ └──────────────────────────────────────────┘ │ │ │ └────────────────────────────────────────────────┘打开方式View → Tool Windows → App Inspection6.2 Database Inspector数据库实时查看这是测试人员最有价值的功能之一功能 ├── 实时查看数据库表结构和数据 ├── 直接执行SQL查询 ├── 在线修改数据测试用 ├── 实时刷新数据变化自动更新 └── 导出数据库实战验证数据写入场景测试注册功能验证用户数据是否正确写入数据库 步骤 1. 打开 App Inspection → 选择Database Inspector标签 2. 选择目标进程 3. 展开数据库 → 展开 user 表 4. 执行注册操作 5. 双击 user 表 → 查看最新数据行 6. 验证字段 ├── username: testuser ✅ ├── email: testexample.com ✅ ├── password: abc123 ❌ 明文存储安全问题 └── created_at: 2026-07-13 ✅ 7. 发现安全问题 → 提交Bug实战执行SQL查询验证场景验证数据删除是否彻底 步骤 1. 在APP中删除某个用户的记录 2. 在Database Inspector的查询框中输入 SELECT * FROM user WHERE user_id 1001; 3. 点击 Run 4. 预期返回空结果 5. 实际如果还有数据 → 软删除未生效Bug实战修改数据模拟测试场景场景测试VIP用户功能但测试账号不是VIP 步骤 1. 在Database Inspector中双击 user 表的 is_vip 字段 2. 将值从 0 改为 1 3. 按回车确认 4. 回到APP刷新页面 5. APP显示VIP功能已解锁 → 可以测试VIP功能了6.3 Network Inspector网络请求实时监控功能 ├── 监控所有HTTP/HTTPS网络请求 ├── 查看请求头和请求体 ├── 查看响应头和响应体 ├── 查看请求耗时 ├── 支持搜索和过滤 └── 不需要配置代理实战验证API调用Network Inspector vs Charles/Fiddler维度Network InspectorCharles/Fiddler配置复杂度零配置需配置代理证书HTTPS抓包自动支持需安装证书断点修改不支持支持请求重放不支持支持模拟弱网不支持支持日常验证✅ 首选太重了6.4 Background Task Inspector功能监控应用的后台任务执行情况 - 查看WorkManager任务状态 - 查看AlarmManager调度 - 查看JobScheduler执行记录 - 适合测试后台同步、定时任务、推送处理七、Layout InspectorUI布局检查与适配验证7.1 为什么测试需要Layout Inspector传统UI测试的痛点 ├── 只能看到渲染结果不知道元素属性 ├── 截图中看不出ID、边距、字体大小 ├── 多语言适配需要逐一切换截图 ├── 暗黑模式需要手动切换验证 └── 布局重叠/遮挡问题肉眼难发现 Layout Inspector 解决 ├── 3D视图直观展示层级关系 ├── 精确查看每个元素的属性值 ├── 一键对比设计稿 ├── 实时切换语言/主题验证 └── 导出截图属性报告7.2 界面布局7.3 实战场景场景一验证元素属性是否与设计稿一致步骤 1. 打开Layout Inspector选择目标进程 2. 在Component Tree中点击目标元素 或在预览窗口中直接点击元素 3. 查看Attributes面板 检查清单 ☐ 文字内容是否正确 ☐ 字号是否与设计稿一致如14sp ☐ 颜色值是否匹配如#333333 ☐ 内边距/外边距是否正确 ☐ 宽高是否符合规范 ☐ 是否有 contentDescription无障碍 ☐ 点击区域是否 ≥ 48dpMaterial Design规范场景二3D视图排查遮挡问题步骤 1. 在Layout Inspector中点击 3D 视图按钮 2. 旋转视角从侧面观察层级关系 3. 检查 ├── 是否有不可见元素遮挡了可点击区域 ├── 弹窗/对话框是否完全覆盖下层 ├── 悬浮按钮是否被其他元素遮挡 └── 多个Fragment叠加时的层级关系 发现遮挡 → 截图3D视图 → 提交Bug场景三暗黑模式/多语言适配验证步骤 1. 在Layout Inspector顶部选择不同配置 ├── Theme: Light / Dark ├── Language: zh-CN / en-US / ... ├── Font Size: Small / Default / Large └── Orientation: Portrait / Landscape 2. 切换后实时预览检查 ☐ 暗黑模式下文字是否可读 ☐ 英文文案是否溢出/截断 ☐ 大字体模式下布局是否正常 ☐ 横屏布局是否适配场景四Compose重组检查Jetpack Compose项目如果是Compose项目Layout Inspector还显示 ├── 重组次数Recomposition Count ├── 跳过次数Skip Count └── 标记过度重组的位置 颜色标记 绿色 未重组理想 蓝色 重组1次 黄色 重组2-5次 红色 重组超过5次性能问题八、Android Profiler性能分析四件套8.1 Profiler概述打开方式View → Tool Windows → Profiler ┌─────────────────────────────────────────────────────────┐ │ Android Profiler │ ├─────────────────────────────────────────────────────────┤ │ [Sessions] [ New Session] │ │ │ │ ┌──────────────────────────────────────────────────┐ │ │ │ CPU ▁▂▃▅▆▇█▇▆▅▃▂▁ 45% │ │ │ │ MEMORY ▂▃▃▄▅▅▆▆▇▇███ 256MB │ │ │ │ NETWORK ▁▁▁▂▅█▂▁▁▁▁▁ 12KB/s │ │ │ │ ENERGY ▁▂▃▄▅▆▆▅▄▃▂▁ Medium │ │ │ └──────────────────────────────────────────────────┘ │ │ │ │ 点击每个区域可进入详细分析视图 │ └─────────────────────────────────────────────────────────┘8.2 CPU ProfilerCPU使用分析功能 ├── 实时CPU使用率监控 ├── 方法耗时分析Call Trace / Sample ├── 火焰图Flame Chart直观展示 ├── 线程活动状态 └── 定位卡顿原因测试场景定位页面滑动卡顿步骤 1. 打开Profiler → 选择进程 → 点击CPU区域 2. 点击 Record开始录制CPU Trace 3. 在APP中快速滑动列表复现卡顿操作 4. 点击 Stop停止录制 5. 分析结果 火焰图解读 ┌────────────────────────────────────┐ │ main thread │ │ ├── Choreographer.doFrame() 98% │ ← 渲染帧 │ │ ├── View.draw() 45% │ │ │ │ ├── Bitmap.decode() 30% │ ← 图片解码耗时 │ │ │ └── Canvas.drawText() 15% │ │ │ └── RecyclerView.layout() 35% │ │ └── ... │ └────────────────────────────────────┘ 结论图片解码占30%时间 → 建议图片压缩/使用Glide缓存CPU指标速查指标正常警告危险CPU使用率30%30%~60%60%主线程占用16ms/帧偶尔16ms持续16msJank卡顿帧5次/分钟5~20次20次8.3 Memory Profiler内存分析功能 ├── 实时内存使用趋势图 ├── 手动触发GC ├── Heap Dump堆转储分析 ├── Allocation Tracking分配追踪 └── 内存泄漏检测测试场景检测内存泄漏内存泄漏特征速查现象可能原因Activity实例在堆转储中存在多个Activity泄漏Handler、匿名内部类Bitmap对象占用持续增长图片未回收Cursor对象未关闭数据库查询后未关闭CursorListener未注销注册了监听但未在onDestroy中移除单例持有Context单例传入Activity Context而非Application Context8.4 Network Profiler网络分析功能 ├── 网络收发速率趋势图 ├── 每个请求的详细时间线 ├── 请求/响应数据量 ├── 连接类型识别WiFi/4G/5G └── 网络请求耗时分解测试场景验证首页加载的网络请求效率8.5 Energy Profiler能耗分析功能 ├── 电量消耗估算Light / Medium / Heavy ├── 后台任务电量消耗 ├── GPS/传感器使用情况 └── 网络请求耗电统计 测试场景 - 验证后台运行1小时的耗电量 - 对比竞品APP的耗电水平 - 定位异常耗电原因九、AVD模拟器多设备兼容性测试9.1 模拟器 vs 真机维度AVD模拟器真机多设备覆盖✅ 无限设备❌ 需要购买系统版本切换✅ 一键切换❌ 需要刷机快照恢复✅ 秒级恢复❌ 需重置自动化集成✅ 易于CI❌ 需要设备农场GPS模拟✅ 任意位置❌ 需实际移动传感器模拟✅ 可编程❌ 需要真实环境真实性能❌ 性能偏差✅ 真实性能真实网络❌ 走宿主机✅ 真实网络环境生物识别❌ 模拟指纹/面容✅ 真实传感器结论模拟器用于兼容性覆盖和快速验证真机用于最终验收和性能测试。9.2 创建和管理AVD9.3 测试场景场景一多分辨率适配测试建议创建的AVD组合覆盖主流市场 ┌────────────────┬──────────┬──────────┬──────────┐ │ 设备类型 │ 分辨率 │ DPI │ 屏幕尺寸 │ ├────────────────┼──────────┼──────────┼──────────┤ │ 小屏手机 │ 1080x1920│ 420dpi │ 5.0 │ │ 中屏手机 │ 1080x2400│ 420dpi │ 6.1 │ │ 大屏手机 │ 1440x3120│ 560dpi │ 6.7 │ │ 折叠屏(展开) │ 2208x1840│ 420dpi │ 7.6 │ │ 平板 │ 2560x1600│ 320dpi │ 10.95 │ └────────────────┴──────────┴──────────┴──────────┘ 测试要点 ☐ 文字不截断、不重叠 ☐ 按钮/图标大小合适≥48dp点击区域 ☐ 图片不变形、不模糊 ☐ 列表/网格列数适配 ☐ 横屏/竖屏切换正常 ☐ 折叠屏展开/折叠状态切换场景二系统版本兼容性测试测试矩阵 ┌──────────────┬──────────┬──────────┬──────────┐ │ 测试场景 │ API 28 │ API 31 │ API 35 │ │ │ (9.0) │ (12) │ (15) │ ├──────────────┼──────────┼──────────┼──────────┤ │ 安装/启动 │ ☐ │ ☐ │ ☐ │ │ 权限申请 │ ☐ │ ☐ │ ☐ │ │ 通知推送 │ ☐ │ ☐ │ ☐ │ │ 存储访问 │ ☐ │ ☐ │ ☐ │ │ 后台限制 │ ☐ │ ☐ │ ☐ │ │ 暗黑模式 │ — │ ☐ │ ☐ │ │ 随你剪切板 │ — │ ☐ │ ☐ │ └──────────────┴──────────┴──────────┴──────────┘场景三快照快速复现快照功能 ├── 保存设备完整状态系统APP数据 ├── 秒级恢复到保存时刻 ├── 可用于 │ ├── 创建已登录快照 → 跳过登录步骤 │ ├── 创建错误状态快照 → 分享给开发 │ └── 创建特定数据快照 → 反复测试同一场景 操作 1. 点击模拟器侧边栏 ⋮ → Snapshots 2. 点击 Take Snapshot → 命名如登录后-首页 3. 需要恢复时 → 点击快照 → 选择恢复方式场景四模拟特殊场景9.4 AVD命令行操作bash# 列出所有AVD emulator -list-avds # 启动指定AVD emulator -avd Pixel_8_API_35 # 启动并指定参数 emulator -avd Pixel_8_API_35 \ -netdelay gprs \ # 模拟网络延迟 -netspeed edge \ # 模拟网速 -wipe-data # 清除数据启动 # 创建快照 adb emu avd snapshot save snapshot_name # 恢复快照 adb emu avd snapshot load snapshot_name # 删除AVD avdmanager delete avd -n Pixel_8_API_35十、App Quality Insights崩溃与质量监控10.1 功能概述App Quality Insights将Firebase Crashlytics和Android Vitals的数据直接集成到Android Studio中让你在IDE中就能查看线上崩溃和质量问题。打开方式View → Tool Windows → App Quality Insights 需要配置 1. 项目已接入 Firebase Crashlytics 2. 在Android Studio中登录 Google 账号 3. 关联 Firebase 项目10.2 核心能力功能 ├── 崩溃报告Crashlytics │ ├── 崩溃次数和影响用户数 │ ├── 崩溃堆栈跟踪 │ ├── 崩溃前的日志 │ ├── 设备信息型号、OS版本 │ └── 崩溃趋势图 │ ├── Android Vitals │ ├── ANR率应用无响应 │ ├── 崩溃率 │ ├── 启动时间 │ └── 唤醒次数 │ └── 智能通知 ├── 新崩溃告警 ├── 崩溃率上升告警 └── 回归问题标记10.3 测试人员的应用场景一验证线上Bug是否修复 1. 在App Quality Insights中找到对应崩溃 2. 查看堆栈和上下文 3. 在新版本中复现验证 4. 确认修复后关闭Issue 场景二分析崩溃趋势 1. 对比发版前后的崩溃率 2. 关注特定机型/OS版本的崩溃集中度 3. 制定兼容性测试重点 场景三监控ANR 1. 筛选ANR相关事件 2. 分析ANR发生时的主线程堆栈 3. 定位卡顿操作 → 补充性能测试用例十一、测试人员日常工作流实战11.1 Bug定位标准流程11.2 日常测试检查清单11.3 完整Bug报告模板markdown# Bug报告 ## 基本信息 | 项目 | 内容 | |------|------| | Bug ID | BUG-2026-0713-001 | | 标题 | [崩溃] 商品详情页滑动时APP闪退 | | 严重程度 | 高 | | 优先级 | P1 | | 版本 | v3.2.1 (Build 20260710) | | 设备 | Pixel 8, Android 15 | | 复现概率 | 100% (3/3) | ## 复现步骤 1. 启动APP登录账号 2. 进入首页 → 点击任意商品 3. 进入商品详情页 4. 快速向下滑动到底部 5. 观察滑动过程中APP闪退 ## 预期结果 商品详情页正常滑动浏览不闪退 ## 实际结果 滑动到底部时APP崩溃退出 ## 崩溃日志 (Logcat)FATAL EXCEPTION: main java.lang.IndexOutOfBoundsException: Index: 5, Size: 5 at java.util.ArrayList.get(ArrayList.java:437) at com.example.app.ProductDetailAdapter.onBindViewHolder(ProductDetailAdapter.kt:87) at com.example.app.ProductDetailAdapter.onBindViewHolder(ProductDetailAdapter.kt:18) ...## 根因分析 - ProductDetailAdapter.kt:87 → 数组越界 - 图片列表有5张图但代码尝试访问第6张 ## 网络请求 (Network Inspector) - GET /api/products/123 → 200 OK - 返回images数组长度为5 - 代码中使用了 index5应为0~4 ## 附件 - [截图] crash_screenshot.png - [日志] logcat_crash.txt - [录屏] crash_reproduce.mp4 - [Profiler] cpu_trace.trace十二、常见问题排坑12.1 Logcat问题问题原因解决方案Logcat不显示日志设备未选中或进程未选中检查设备和进程下拉选择日志太多刷屏未设置过滤设置级别为Error或添加Tag过滤中文显示乱码编码问题File → Settings → Editor → File Encodings → UTF-8看不到应用日志应用进程未选择在下拉中选择对应包名的进程12.2 Profiler问题问题原因解决方案Profiler无法连接设备/进程不可调试确保APP是debuggable的debug构建CPU Trace录制失败权限不足检查设备是否允许USB调试Memory Dump过大内存占用高先触发GC再DumpNetwork不显示非HTTP请求Network Profiler只监控HTTP/HTTPS12.3 AVD模拟器问题问题原因解决方案模拟器启动慢首次启动/冷启动使用快照功能加速模拟器卡顿分配资源不足增大RAM和VM Heap无法联网DNS配置问题模拟器设置中配置DNS无法安装ARM应用x86镜像不支持下载ARM系统镜像或使用真机12.4 连接问题问题原因解决方案adb devices无设备USB调试未开启开发者选项中开启USB调试unauthorized未授权手机上点击允许USB调试offline连接中断重新插拔USB或重启adb多设备冲突连接了多个设备adb -s 设备ID指定设备12.5 最佳实践总结✅ DO推荐做法 ├── 每天开始测试前清空Logcat ├── 用Error级别Tag过滤减少干扰 ├── 使用条件断点而非盲目逐行调试 ├── 利用AVD快照快速切换测试状态 ├── 发现崩溃第一时间保存堆栈 ├── 用Network Inspector代替抓包工具做日常验证 ├── 性能测试前先预热APP排除冷启动影响 ├── Bug报告附上完整的诊断信息 ❌ DONT不推荐做法 ├── 不要开着Logcat全部级别做测试信息过载 ├── 不要在Release包上Debug需要debuggable ├── 不要仅凭AVD测试就下性能结论需真机验证 ├── 不要在Profiler录制时做其他重型操作干扰数据 ├── 不要忽略Warn级别日志往往是问题的前兆 ├── 不要只截图不保存日志开发需要日志定位根因 └── 不要跳过Layout Inspector做UI验收肉眼不可靠十三、总结13.1 Android Studio测试工具速查表工具快捷键核心用途测试场景LogcatAlt6日志分析崩溃定位、异常监控DebuggerShiftF9断点调试变量追踪、逻辑验证Device Explorer—文件管理数据库导出、SP查看Database Inspector—数据库实时查看数据验证、SQL查询Network Inspector—网络请求监控API验证、请求追踪Layout Inspector—UI检查布局验证、适配测试CPU Profiler—CPU分析卡顿定位、方法耗时Memory Profiler—内存分析内存泄漏检测Network Profiler—网络分析请求效率分析Energy Profiler—能耗分析耗电测试AVD Manager—模拟器管理多设备兼容性测试App Quality Insights—崩溃监控线上问题追踪13.2 不同级别测试人员的能力矩阵能力初级中级高级Logcat会过滤Error会自定义过滤器导出会分析堆栈定位根因Debug会打断点会用条件断点Watch会分析调用栈变量流转Device Explorer会导出文件会查看SP/数据库会批量自动化操作App Inspection会看数据库会SQL查询网络监控会模拟数据综合验证Layout Inspector会看属性会验证适配多语言会分析层级性能优化建议Profiler会看CPU曲线会录制Trace分析会定位内存泄漏火焰图解读AVD会创建启动会用快照多设备会脚本化管理CI集成13.3 记忆口诀测试定位三板斧Logcat看错误Debug看变量Profiler看性能数据验证两利器Database查表不导出Network看请求不配代理UI适配一步到位Layout Inspector看属性AVD多设备全覆盖Bug报告要完整日志堆栈请求截图一个都不能少相关推荐阅读Airtest专题APP自动化测试实战APP专项测试实战安装卸载弱网兼容中断埋点全覆盖PerfDog性能测试实战从入门到性能优化全覆盖F12开发者工具全攻略测试必会的前端调试利器本文完成于 2026年7月基于 Android Studio Hedgehog | 2024.1 版本编写