# Android开发

<figure><img src="/files/wf6hF1O2XyrcT5rfXG74" alt=""><figcaption></figcaption></figure>

本文档主要介绍基于Android原生开发方式，如何在RayNeo X系列眼镜上开发一款用户可以正常使用的APP，它与正常手机端开发相比，有哪些限制和不同，以及如何接入我们提供的SDK来解决这些问题。

了解设备细节：[设备介绍](/rayneo-devdoc/x-xi-lie/she-bei-jie-shao.md)

X系列是一款AR眼镜，它内含一个完整的Android系统（Android 12），与一般手机端App开发相比，主要有以下几点不同：

**屏幕**： 一般手机只有一块屏幕，而眼镜上有两块屏幕，左边的屏幕投射到左眼，右边的屏幕投射到右眼，我们从系统获取到的是左右两块屏幕组合起来形成的逻辑屏幕。

* 正常手机端APP运行到眼镜上，画面会有撕裂感，左边屏幕显示左半部分，右边的屏幕显示右半部分，左右两部分重叠中在一起。所以，需要我们布局的时候，同一份UI要左右各放一份，以解决正常合目问题。
* RayNeo ARSDK for Android中提供了很多基础组件（View、Activity、Dialog、Toast等），来解决合目问题，以方便开发者快速进入开发，而不用写很多模版代码。

**事件响应和焦点切换**：手机端屏幕的触摸事件是二维的，包含X，Y坐标；X3眼镜已经支持了二维的坐标，但是依然需要做焦点管理，X2的应用可以通过更新SDK后迁移到X3上。

{% tabs %}
{% tab title="SDK接入及开发" %}
[ ARDK下载](/rayneo-devdoc/x-xi-lie/android-kai-fa/ardk-xia-zai.md)

&#x20;[快速开始](/rayneo-devdoc/x-xi-lie/android-kai-fa/kuai-su-kai-shi.md)

&#x20;[能力介绍 & API](/rayneo-devdoc/x-xi-lie/android-kai-fa/neng-li-jie-shao.md)

&#x20;[IPCSDK for Android](/rayneo-devdoc/x-xi-lie/android-kai-fa/ipc-sdk.md)
{% endtab %}

{% tab title="开发调试相关" %}
&#x20;[ADB连接及投屏](/rayneo-devdoc/chang-jian-wen-ti/adb-tiao-shi/adb-lian-jie-ji-tou-ping.md)

&#x20;[ADB指令](/rayneo-devdoc/chang-jian-wen-ti/adb-tiao-shi/adb-zhi-ling.md)

&#x20;[示例sample代码](https://leiniao-ibg.feishu.cn/wiki/T4WSw4WIZiK2rgksMU5caSiRnwg)
{% endtab %}
{% endtabs %}

### 功能清单

| 功能模块              | 功能点                                                           | 说明                                                  | 核心组件 / 工具类                          |
| ----------------- | ------------------------------------------------------------- | --------------------------------------------------- | ----------------------------------- |
| 合目                | 合目组件                                                          | 实现左右双屏布局镜像效果，减少重复代码                                 | BindingPair                         |
| Activity 级别合目     | 自动镜像布局视图，开发者只需关注业务 UI                                         | BaseMirrorActivity                                  |                                     |
| Fragment 级别合目     | Fragment 级别的合目封装，需单独使用（不能添加到 BaseMirrorActivity 中）            | BaseMirrorFragment                                  |                                     |
| View 级别合目         | 基于组合（MirrorContainerView）和继承（BaseMirrorContainerView）的合目 View | MirrorContainerView、BaseMirrorContainerView         |                                     |
| Toast 合目          | 支持合目的通用 Toast 封装                                              | FToast                                              |                                     |
| Dialog 合目         | 支持合目的通用 Dialog 封装                                             | FDialog                                             |                                     |
| updateView 方法     | 同时操作左右布局的组件更新，避免重复代码                                          | BindingPair.updateView                              |                                     |
| setLeft 方法        | 仅操作左边布局，适合事件绑定或外部数据修改                                         | BindingPair.setLeft                                 |                                     |
| 焦点管理              | 焦点追踪基础实现                                                      | 维护焦点切换逻辑，支持手势（前滑 / 后滑）和事件响应（单击 / 双击）                | FocusHolder、FixPosFocusTracker      |
| RecyclerView 焦点管理 | 支持列表场景的焦点切换，分固定焦点位和移动焦点位两种模式                                  | RecyclerViewSlidingTracker、RecyclerViewFocusTracker |                                     |
| 自定义 View 焦点接口     | 自定义 View 实现焦点切换逻辑                                             | IFocusable 接口                                       |                                     |
| 触摸事件 & 响应         | 手势识别与分发                                                       | 将原始 MotionEvent 转换为单击、长按、滑动等手势，并通过事件流暴露             | TouchDispatcher、CommonTouchCallback |
| 事件流封装             | 将手势映射为 TempleAction 子类对象，支持 Kotlin Flow 响应                    | BaseEventActivity、TempleAction                      |                                     |
| Rayneo X3 新增手势    | 支持上滑、下滑、双指点击等手势，优化滑动方向识别                                      | CommonTouchCallback 接口                              |                                     |
| 滑动方向映射            | 支持自然模式与非自然模式的触控板滑动映射，可在系统设置中切换                                | TempleAction.SlideForward/Backward                  |                                     |
| 跟手效果              | 固定焦点位列表跟手                                                     | 修改原始事件坐标，实现列表滚动跟手效果                                 | RecyclerViewSlidingTracker          |
| 移动焦点位列表跟手         | 按滑动距离触发焦点切换，结合列表滚动                                            | RecyclerViewFocusTracker                            |                                     |
| 固定 View 跟手效果      | 固定位置 View 的跟手滑动响应                                             | FixPosFocusTracker                                  |                                     |
| 3D 效果实现           | 双目视差伪 3D                                                      | 通过左右视图偏移产生视差，形成 3D 效果                               | make3DEffect、make3DEffectForSide    |
| 音频开发              | X2 收音模式                                                       | 支持录音、相机收音、翻译、语音助手等模式，需通过 AudioManager 设置参数          | AudioManager.setParameters          |
| X3 收音模式           | 新增特定收音模式（文档未详述，需参考具体实现）                                       | -                                                   |                                     |
| Camera 开发         | 相机功能调用                                                        | 基于 Android camera2 API，支持分辨率枚举和预览                   | CameraManager、Camera2 API           |
| 手机连接 & GPS 推流     | 手机连接状态监听                                                      | 实时获取手机蓝牙连接状态                                        | MobileState.isMobileConnected()     |
| GPS 数据推流          | 集成 IPC SDK 获取手机 GPS 数据，需处理异步回调                                | IPC SDK、OnResponseListener                          |                                     |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://rayneo.gitbook.io/rayneo-devdoc/x-xi-lie/android-kai-fa.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
