跳到主要内容

Android 环境要求与 SDK 引入

SDK Version: 1.0.0
Platform: Android

1. 构建基线

项目要求
AndroidminSdk 26 或更高
编译参考compileSdk 36
Java/KotlinJDK 17,Kotlin JVM target 17
设备支持 BLE 的 Android 真机,系统蓝牙已开启

2. 获取 Release 产物

客户通过约定交付渠道取得 SDK 1.0.0 的正式 Release AAR、依赖清单、校验值和混淆规则。文档 ZIP 不包含 AAR;不要把测试产物用于上架版本。

按业务选择交付物,不要求每个 App 全部引入:

SDK 产品交付模块名主要入口
BLEble-sdkXTalkBleClient
Channel Presencechannel-presence-sdkChannelPresenceScanSdk
Device Authdevice-auth-sdkDeviceAuthenticator
Device Initdevice-init-sdkDeviceInitializer
Meshmesh-sdkMeshSdk
Low Latency PTTlow-latency-ptt-sdkLowLatencyPttSdk
OTAota-sdkXTalkTurMassOtaManager / XTalkBluetoothFotaManager
Radio Transportradio-transport-sdkRadioTransport
STTstt-sdkXTalkStt
UARTuart-sdkXTalkUartClient / UartRadioTransport

把全部交付 AAR 放入 App 模块的 libs

dependencies {
implementation(fileTree("libs") { include("*.aar") })
}

Groovy:

dependencies {
implementation fileTree(dir: "libs", include: ["*.aar"])
}

AAR 不会自动内嵌所有外部依赖。必须逐项加入交付清单列出的依赖,且各 AAR 保持同一 SDK 版本。核心 SDK 默认按正式 AAR 交付;若交付清单提供客户专用 Maven 仓库,则以清单中的仓库地址、凭据和坐标为准,本文不提供公共仓库地址。

例如 Mesh 走 BLE 时,至少需要 Mesh、BLE 和它们交付清单中的传递依赖;Low Latency PTT 还需要客户实现或接入其 transport 与音频编解码链。不要通过复制 SDK 源码接入。

3. Manifest 与运行时权限

<uses-feature android:name="android.hardware.bluetooth_le" android:required="true" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 只有使用采集语音时才需要 -->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
  • Android 12/API 31 以上:动态申请 BLUETOOTH_SCANBLUETOOTH_CONNECT
  • Android 11/API 30 以下:扫描需要 ACCESS_FINE_LOCATION
  • RECORD_AUDIO 只用于 PTT/实时语音采集;普通 BLE、AT、RF、文本和文件不需要它。
  • POST_NOTIFICATIONS 只在客户 App 实际发送通知且系统要求时申请。

SDK 权限辅助函数:

val blePermissions = requiredBluetoothPermissions()
val bleGranted = hasBluetoothPermissions(context)

// 包含 BLE、录音,并在需要时包含通知权限;适合启用全部能力的 App。
val allStartupPermissions = requiredStartupPermissions()
val allGranted = hasStartupPermissions(context)

辅助函数只计算/检查权限,不弹系统授权框。Activity 或 Fragment 仍需使用 Activity Result API 请求权限,并在拒绝时停止扫描或录音。

4. 初始化与结果处理

Application.onCreate() 或 BLE 功能首次进入时调用:

XTalkBleClient.setApplicationContext(applicationContext)
val result = XTalkBleClient.ensureInitialized()
check(result == InitResult.INIT_OK) { "xTalk initialization failed: $result" }

setApplicationContext 会保存 Application Context,不会持有 Activity。ensureInitialized 可重复调用;非 INIT_OK 时不要继续扫描。

5. Release/R8 检查

  1. 使用交付清单中的 consumer/ProGuard 规则,不自行猜测类名。
  2. 确认所有 AAR、外部依赖和 ABI 文件齐全。
  3. 在启用 minifyEnabled 的 Release 变体上执行扫描、连接、Auth、Init 和收发冒烟测试。
  4. 若仅 Release 失败,保留完整异常堆栈、设备型号和系统版本,交给 xTalk 支持;不要通过整体关闭混淆掩盖问题。

下一步:BLE 连接 SDK