Skip to content

Glass3 SDK 快速开始

本页帮助你完成 Glass3 SDK 的开发环境准备,以及手机端和眼镜端 SDK 的基础集成。

你将完成什么

完成本页后,你应该可以:

  • 确认眼镜调试线、投屏工具和开发环境。
  • 为手机端和眼镜端应用添加 SDK 依赖。
  • 知道后续应该阅读 Demo 运行指南、代码示例、API 参考和眼镜端设计规范。

如果你希望先看视频演示,可以在 视频教程 中查看“五分钟快速构建应用”。正式接入时,建议优先按本文步骤操作。

如果你想先跑通官方 Demo,请查看 Demo 运行指南。本文下面主要说明如何在自己的 Android 工程中配置 Maven 仓库并接入 SDK 依赖。

如果你需要开发眼镜端页面,建议在开始写 UI 前先阅读 眼镜端设计规范,了解 Glass3 显示区域、布局、安全距离和视觉呈现建议。

1. 先确认线材和投屏工具

在运行眼镜端 Demo 前,请先确认你手上的是 Glass3 数据调试线,不是普通充电线。很多调试失败都来自线材用错:充电线只能充电,不能让 Android Studio 识别眼镜设备。

物品用途是否必须
Glass3 数据调试线连接眼镜和电脑,让 Android Studio 识别眼镜并安装眼镜端 Demo。必须
Glass3 充电线给眼镜充电。不能用于 Android Studio 调试。按需
scrcpy 投屏工具将眼镜画面投到电脑上,便于确认安装、运行和 UI 状态。强烈建议

1.1 Glass3 数据调试线

调试线用于让 Android Studio 识别眼镜设备。运行眼镜端 Demo、查看设备日志、安装 APK 时都需要它。

Glass3 数据调试线

连接后,可以在 Android Studio 的设备列表中看到类似 Rokid RG-glasses 的设备。如果没有识别到设备,请优先检查是否使用了数据调试线。

1.2 Glass3 充电线

充电线只用于充电,不能作为眼镜端 Demo 的调试连接线。

Glass3 充电线

如果你只能给眼镜充电,但 Android Studio 看不到设备,通常说明当前线材不是数据调试线。

1.3 了解 scrcpy 投屏工具

建议使用 scrcpy 将眼镜画面投到电脑上,便于确认眼镜端 Demo 是否启动、页面是否显示、交互是否生效。

如果你需要了解下载、安装和使用方式,请查看 调试与投屏工具:scrcpy

2. 准备开发环境

2.1 开发环境

项目要求
Android Studio建议使用 2022 或更高版本
JDK17 或更高版本
Android 系统Glass3 SDK 支持 Android 8.0 及以上版本
设备Rokid Glass3 眼镜 + Android 手机

3. 配置 Maven 仓库

在工程中加入 Rokid Maven 仓库。

Gradle 7.0 及以上版本,推荐在 settings.gradle 中配置:

groovy
dependencyResolutionManagement {
    repositories {
        google()
        mavenCentral()
        maven { url 'https://maven.rokid.com/repository/maven-public/' }
    }
}

Gradle 7.0 以下版本,可在根目录 build.gradle 中配置:

groovy
buildscript {
    repositories {
        google()
        mavenCentral()
        maven { url 'https://maven.rokid.com/repository/maven-public/' }
    }
}

4. 集成 SDK 依赖

4.1 眼镜端 SDK

在眼镜端应用模块的 build.gradle 中添加:

groovy
dependencies {
    implementation ('com.rokid.security:glass3.open.sdk:2.2.0-E') {
        exclude group: "org.slf4j"
    }
}

如果遇到 native 库冲突,在 android 配置中添加:

groovy
android {
    packagingOptions {
        pickFirst 'lib/arm64-v8a/libr2aud.so'
        pickFirst 'lib/armeabi-v7a/libr2aud.so'
    }
}

4.2 手机端 SDK

在手机端应用模块的 build.gradle 中添加:

groovy
dependencies {
    implementation ('com.rokid.security:phone.sdk:2.2.0-E') {
        exclude group: "org.slf4j"
    }
}

5. 权限配置

根据实际业务能力,在 app/src/main/AndroidManifest.xml 中声明权限。

5.1 手机端常用权限

xml
<!-- 基础能力 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />

<!-- 媒体能力 -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.VIBRATE" />

<!-- 存储能力 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<!-- Android 12 以下蓝牙权限 -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

<!-- Android 12 及以上蓝牙权限 -->
<uses-permission
    android:name="android.permission.BLUETOOTH_SCAN"
    android:usesPermissionFlags="neverForLocation" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />

<!-- 定位与 Wi-Fi P2P -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission
    android:name="android.permission.NEARBY_WIFI_DEVICES"
    android:usesPermissionFlags="neverForLocation" />

<uses-feature
    android:name="android.hardware.wifi.direct"
    android:required="false" />
<uses-feature
    android:name="android.hardware.camera"
    android:required="false" />

Android 6.0 及以上版本,危险权限通常还需要动态申请,不能只依赖 AndroidManifest.xml 静态声明。

5.2 眼镜端常用权限

xml
<!-- 基础能力 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />

<!-- 媒体能力 -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.VIBRATE" />

<!-- 存储能力 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission
    android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
    tools:ignore="AllFilesAccessPolicy,ScopedStorage" />

<!-- 蓝牙能力 -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission
    android:name="android.permission.BLUETOOTH_SCAN"
    android:usesPermissionFlags="neverForLocation"
    tools:targetApi="31" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />

<!-- 定位与 Wi-Fi P2P -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission
    android:name="android.permission.NEARBY_WIFI_DEVICES"
    android:usesPermissionFlags="neverForLocation"
    tools:targetApi="31" />

<uses-feature
    android:name="android.hardware.wifi.direct"
    android:required="false" />
<uses-feature
    android:name="android.hardware.camera"
    android:required="false" />

6. 一行代码确认 SDK 状态

完成依赖、权限和初始化代码后,可以在对应端侧打印 SDK 状态,确认 SDK 是否已经处于可用状态。

眼镜端:

kotlin
Log.d("SDK_CHECK", "glass sdk ready = ${GlassSdk.isReady()}")

手机端:

kotlin
Log.d("SDK_CHECK", "phone sdk initialized = ${PSecuritySDK.getMobileEngineService().isInit()}")

如果日志输出为 true,说明对应端侧 SDK 已完成初始化或处于可用状态。如果输出为 false,请回到初始化代码检查,或参考 Demo 运行指南API 参考

7. 下一步