Android 模拟器调试 ARCore 应用
为什么要提模拟器
ARCore 的大多数功能依赖真实摄像头和传感器数据,在没有物理测试设备时模拟器是退而求其次的选择——但它远不如真机好用,适合做以下工作:
- 基础 UI 逻辑验证(按钮点击、菜单跳转等)
- 单元测试和自动化测试框架集成
- 无传感器依赖的 Session 生命周期逻辑测试
以下功能模拟器完全不支持:运动跟踪、平面检测、Depth API、Geospatial API、Augmented Images、Augmented Faces。
模拟器配置步骤
步骤一:创建 AVD(Android Virtual Device)
打开 Android Studio → Tools → Device Manager → Create Device:
- 选择设备定义:推荐选 Google Pixel 4 / 5 / 6,分辨率 1080p 以上
- 选择系统镜像:必须选 x86_64 架构的系统镜像,API Level ≥ 27(Android 8.1+)
- 启用摄像头:在 AVD 的高级设置中,确保摄像头被启用(可以选择使用主机摄像头或虚拟场景)
- 完成创建
模拟器不支持任何有深度传感器的硬件模拟——Depth API 在模拟器上永远返回空数据,Geospatial API 同样不可用。
步骤二:模拟器摄像头配置
模拟器有两种摄像头模式:
| 模式 | 说明 | 适用场景 |
|---|---|---|
| Host | 使用电脑的物理摄像头作为 ARCore 输入 | 测试摄像头权限逻辑、ARCore Session 能否正常初始化 |
| Virtual Scene | 显示一个虚拟的 3D 场景(如一个房间),ARCore 可以从中识别特征点 | 测试 Session 创建和基本帧循环(但识别效果非常有限) |
推荐使用 Host 模式:它至少能让你测试 Session 能否打开、帧循环是否正常、摄像头权限请求流程。
步骤三:运行 ARCore 应用到模拟器
像调试普通 Android 应用一样,选择模拟器作为运行目标即可。如果遇到错误:
- Camera permission denied:在模拟器设置中手动启用摄像头权限
- Google Play Services for AR not available:确保模拟器使用的是带 Google Play 支持的系统镜像(AVD 创建时选择"Google APIs"或"Google Play"标签)
- Session 创建失败:检查 AVD 是否开启了摄像头,尝试重启模拟器
Unity 中的模拟器配置
Unity 开发时模拟器配置稍微麻烦一些:
- Unity Build Settings → Android → Switch Platform
- 确保 Build Settings 里有正确的 ADB 路径(通常自动检测)
- 在 Unity 中点击 Play 前,先在 Android Studio 的 Device Manager 中启动模拟器
- Unity 会自动检测到运行的模拟器并可以 Build & Run
Unity 的 AR Session Origin 在模拟器上会尝试创建 Session,失败时会静默处理——你需要自己添加日志确认 Session 状态。
模拟测试场景:虚拟 AR 数据注入
Google 提供了 FakeSession 测试工具,可以在单元测试中注入假的相机 pose 和帧数据,而不依赖真实传感器或模拟器摄像头:
// 单元测试中使用 FakeSession
val fakeSession = FakeSession(AndroidVersion.SDK_TYPE_CURRENT)
fakeSession.resume()
// 手动设置一个假的 camera pose
val fakePose = Pose(Vector3(0f, 0f, -3f), Quaternion.identity())
fakeSession.setCameraPose(fakePose)
// 在测试循环中更新 session
while (fakeSession.update(frame)) {
// 用假数据跑你的渲染逻辑
}
这对于自动化测试场景非常有用——你的 AR 应用逻辑可以脱离真实硬件被持续验证。
真机远程调试的替代方案
如果你没有实体 Android 设备但需要测试真实 ARCore 行为,几个替代选项:
- Firebase Test Lab:可以远程在真实 Pixel 设备上跑你的应用,但 ARCore 的摄像头数据质量无法保证,更适合功能冒烟测试
- 第三方云手机服务:部分云手机服务提供真实 Android 设备,但很少有支持完整 ARCore 的
- iOS 开发者朋友:Cloud Anchors 跨平台测试时,最靠谱的方式是找朋友借一台 iPhone 做交叉验证
总结
模拟器是 ARCore 开发中的"最低配选项"——能帮你过基本流程,但不能替代真机调试。运动跟踪、平面检测、Depth 数据这些核心功能必须在真实设备上测试。建议开发前先准备好至少一台支持 ARCore 的 Android 手机和一台 iPhone(如果涉及跨平台功能)。