环境搭建

一、概述

本文主要介绍在集成绿米 SDK 前,需要在您的项目中添加的一些配置,以及获取 SDK 初始化必要的参数。可参考示例工程 aqara_sdk_sample 对照集成。

二、前提条件

  1. 确保您已经完成准备工作
  2. 确保您已经安装了 Android Studio 并配置了 JDK、Android SDK 等开发环境,详情介绍请前往Android 开发者官网

三、添加依赖

3.1 编译环境需求

参数 版本号 描述
minSdkVersion 26 Android 8.0
targetSdkVersion 36 Android 16
compileSdk 36 Android 16
Java 17 /
NDK 27.0.12077973 /
Kotlin 2.1.0 /
KSP 2.1.0 /
Android Gradle Plugin 9.1.0+ 最低需要8.9+
Gradle 9.3.1+ 最低需要8.9+

3.2 打开 Android Studio

3.3 编辑根目录下的settings.gradle

pluginManagement {
    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
        maven { url 'https://jitpack.io' }
        // Aqara Maven 仓库
        maven {
            url 'https://public-maven.aqara.com/repository/lumi-release/'
            credentials {
                username = 'maven_username'
                password = 'maven_password'
            }
        }
    }
}

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
        maven { url 'https://jitpack.io' }
        // Aqara Maven 仓库
        maven {
            url 'https://public-maven.aqara.com/repository/lumi-release/'
            credentials {
                username = 'maven_username'
                password = 'maven_password'
            }
        }
    }
}

maven_username及maven_password从示例工程或者联系商务获取

3.4 编辑根目录下的build.gradle

buildscript {
    dependencies {
        // Aqara SDK 统一初始化插件(Gradle 8.x+ 请使用 3.0.0)
        classpath 'com.lumi.plugin:module-init:3.0.0'
    }
}

plugins {
    id 'com.android.application' version '9.1.0' apply false
}

3.5 编辑app目录下的build.gradle

plugins {
    id 'com.android.application'
}

// Aqara 统一初始化插件
apply plugin: 'lumi-module-init'

android {
    namespace 'com.your.package.name'
    compileSdk 36

    defaultConfig {
        applicationId "com.your.package.name"
        minSdk 26
        targetSdk 36
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_17
        targetCompatibility JavaVersion.VERSION_17
    }

    // 解决 so / 资源冲突(集成多业务 SDK 时建议配置)
    packagingOptions {
        jniLibs {
            pickFirsts += ['lib/arm64-v8a/libc++_shared.so', 'lib/armeabi-v7a/libc++_shared.so']
        }
        resources {
            excludes += ['META-INF/DEPENDENCIES', 'META-INF/com.github.CymChad.brvah.kotlin_module',
                         'META-INF/gradle/incremental.annotation.processors']
        }
    }
}

// 若同时集成扫码与红外等模块,可能出现 zxing 冲突,可按需排除
configurations.configureEach {
    exclude group: 'com.google.zxing', module: 'core'
}

dependencies {
    // Core SDK(必需),请使用最新版本,参见[SDK最新版本](./SDK最新版本.md)
    implementation 'com.lumi.external:core:2.2.62'
    implementation 'com.lumi.commonui:ui:1.5.33'
}

3.6 AndroidX 支持

gradle.properties中添加对 AndroidX 的支持:

android.useAndroidX=true
android.enableJetifier=true

3.7 权限声明

Core SDK 及多数业务能力依赖网络权限。请在宿主 App 的 AndroidManifest.xml 中声明(部分权限也可能由 SDK AAR 自动合并):

<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" />

蓝牙、定位、麦克风、存储等权限由具体业务 SDK(配网 / 摄像机 / 门锁等)按需使用,请参见对应业务文档补充声明,并在运行时申请危险权限。

四、初始化

4.1 获取SDK初始化必要的参数

4.1.1 AppId、AppKey获取

参见文档准备工作

4.1.2 其他必要参数获取

根据不同的账户授权方式,获取方式也不一致,详情请参考授权管理

通常来讲,大部份时候都是使用虚拟账户授权模式,即第三方 App 需要请求自身云平台获取相关的参数:

4.2 SDK初始化

集成绿米 Android 端各个业务 SDK,通常情况下仅需通过LumiCoreManager进行统一初始化即可,其他业务 SDK 通常情况下不需要单独进行初始化。

4.2.1 进行统一初始化

初始化接口调用

val extension = HashMap<String, Any>()
extension[LumiReactNativeManager.LumiReactNativeConfig.KEY_BUNDLE_LOAD_TYPE] = RNBundleLoadType.PREFAB_ASSETS
extension[LumiReactNativeManager.LumiReactNativeConfig.KEY_BUNDLE_CONFIG_LOAD_TYPE] = RNBundleConfigLoadType.PREFAB_ASSETS

LumiCoreManager.getInstance().init(
    application,
    true, // true 打开调试日志,false 关闭
    LumiCoreManager.LumiCoreSDKConfig.builder()
        .baseUrl("host")
        .baseH5Url("h5Url")
        .baseImageUrl("imageUrl")
        .appId("appId")
        .appKey("appKey")
        .clientId("clientId")
        .sdkChannel("sdkChannel")
        .userInfo(object : ILumiUserInfo {
            override fun getUserId(): String? = "userId"
            override fun getUserToken(): String? = "userToken"
            override fun getArea(): String = "area"
            override fun getLanguage(): String = "language"
            override fun getSupportDeviceArea(): String = "supportDeviceArea"
            override fun getCountry(): String = "country"
            override fun getCoapServer(): String = "coapServer"
        })
        .positionInfo(object : ILumiPositionInfo {
            override fun getHomeId(): String? = "positionId"
        })
        .extensions(extension)
        .build()
)

参数说明

字段 数据类型 说明 获取渠道
appId String App 唯一标识 Aqara 开发者平台
appKey String App 密钥 Aqara 开发者平台
clientId String App 推送唯一标识 接口获取,详情请查看Aqara开发者平台
baseUrl String SDK 请求的域名 接口获取,详情请查看Aqara开发者平台
baseH5Url String SDK 请求的 H5 链接 接口获取,详情请查看Aqara开发者平台
baseImageUrl String SDK 请求的图片 CDN 地址 接口获取,详情请查看Aqara开发者平台
sdkChannel String 渠道标识 项目标识,影响部分业务逻辑处理,填写项目名称即可
userId String 用户唯一标识 接口获取,详情请查看Aqara开发者平台
userToken String 用户访问令牌 接口获取,详情请查看Aqara开发者平台
area String App 所在地区 默认值为 CN,详情请参见地区对照表
language String App 当前语言 默认值为 zh,详情请参见地区对照表
supportDeviceArea String 设备入网的地区 默认值 CHN,详情请参见地区对照表
country String 用户 / 设备实际所在国家或地区 详情请参见地区对照表
coapServer String 设备入网 CoAP 服务地址 详情请参见地区对照表
positionId / homeId String 当前位置 / 家庭 ID 接口获取;通过 positionInfo 传入
extensions Map 扩展配置 按业务按需传入

注意:areasupportDeviceArea 部分地区代号存在差异;coapServer 必须与当前云端域名所在区域匹配。

language取值

language 参数会影响 SDK 及云端返回的多语言类型。

取值 描述 说明
zh 简体中文 默认值
zh_TW 台湾繁体 /
zh_HK 香港繁体 /
en 英文 /
ko 韩文 /
ru 俄文 /
de 德文 /
it 意大利文 /
fr 法文 /
es 西班牙文 /

注意:该值仅影响动态化获取信息的多语言,例如云端接口、配置文件等,SDK 本身使用到的多语言(存放在 strings.xml 中)则跟随宿主 App 的多语言。

area取值

area 参数会影响云端接口的业务逻辑,在某些地区下可能存在部分业务不可用。

取值 描述 说明
CN 中国大陆 默认值
HMT 中国香港、澳门、台湾 /
US 美国 /
EU 欧洲 /
RU 俄罗斯 /
SEA 东南亚 /
KR 韩国 /
JP 日本 /
AU 澳大利亚 /
ME 中东 /
AF 非洲 /
OTHER 其他地区 /

supportDeviceArea取值

supportDeviceArea 参数会影响设备入网配置。部分设备仅能在特定地区进行激活使用,请按实际情况进行填写

取值 描述 说明
CHN 中国大陆 默认值
HMT 中国香港、澳门、台湾 /
USA 美国 /
EU 欧洲 /
RUS 俄罗斯 /
SEA 东南亚 /
KR 韩国 /
JP 日本 /
AU 澳大利亚 /
ME 中东 /
AF 非洲 /
OTHER 其他地区 /

country取值

country 参数用于标识用户 / 设备实际所在国家或地区,影响设备 SN 管理与入网校验,请按真实地区填写。

取值请参见地区对照表

选定 country 后,请同步配套设置对应的 areasupportDeviceAreacoapServer,三者需匹配同一服务地区。

4.2.2 更新用户信息

如果需要切换用户,或者 Token 失效了,需要重新请求接口获取,详情请查看Aqara开发者平台,并且更新 SDK 的用户信息。

更新用户信息接口调用

LumiCoreManager.getInstance()
    .updateUserConfig(object : ILumiUserInfo {
        override fun getUserId(): String? = "userId"
        override fun getUserToken(): String? = "userToken"
        override fun getArea(): String = "area"
        override fun getLanguage(): String = "lang"
        override fun getSupportDeviceArea(): String = "supportDeviceArea"
        override fun getCountry(): String = "country"
        override fun getCoapServer(): String = "coapServer"
    })

4.3 RxJava 统一错误处理

SDK中使用了大量 RxJava,建议在 Application 中统一处理未捕获异常,避免个别异常导致应用崩溃:

override fun onCreate() {
    super.onCreate()
    RxJavaPlugins.setErrorHandler {
        it.printStackTrace()
    }
}

五、推送

SDK 本身不具备获取云端推送的能力,需要依赖宿主 App 的推送。详情请查看消息推送

5.1 订阅推送

LumiCoreManager.getInstance().rePushClientId("clientId")

参数说明

字段 数据类型 说明 获取渠道 示例
clientId String App 推送唯一标识 接口获取,详情请查看Aqara开发者平台 HOST+随机字符串(64位以内,建议 HOST 拼接 SDK 初始化获取的 token 来使用)

5.2 转发推送

第三方 App 收到关于 Aqara 设备的推送时,可以将其转发给 SDK:

LumiCorePushManager.getInstance().onMessage("content")

注意不要将一整个消息体透传给 SDK,SDK 仅需要 LUMI@ 开头的字符串。

参数说明

字段 数据类型 说明 获取渠道
content String 推送消息 App 自身获取

5.3 推送消息格式

content传递给 SDK 即可:

{
  "sequenceNo": "202106031107",
  "osType": "android",
  "content": "LUMI@eyJ0eXBlIjoicmVzX3N1YnNjcmliZSIsInJlc3VsdCI6eyJ0aW1lU3RhbXAiOjE2MjMwNjUwNjA5NzYsImF0dHJDaGFubmVsIjoxLCJzb3VyY2UiOiI0LCwxNjIzMDY1MDYwNzgxLDlmMzgyMTIwNjczMTI0ZDI5N2VmNjI0MV9lOTE3ZjE0MDBhNTIyNDk1LjU0NTU4MTgyNTk4MDg5MTEzNywsIiwiYXR0ciI6IjE0LjcuODUiLCJ2YWx1ZSI6IjEyOTE4MTExNTIiLCJzdWJqZWN0SWQiOiJsdW1pMS41NGVmNDRjOTExNjUiLCJpZGVudGlmeUlkIjoiSE9TVDA0YTZkYzAzNzMyNTM3NTBiMzIyMzMxOGVhMGQ1ZmVhMjk0YSIsInB1c2hUeXBlIjoicmVzX3N1YnNjcmliZSJ9LCJjb2RlIjowfQ==",
  "token": "04a6dc0373253750b3223318ea0d5fea294a"
}
lumi LogoCopyright © 2023 深圳绿米联创科技有限公司 all right reserved,powered by Gitbook文档修改时间: 2026-08-11 17:06:15

results matching ""

    No results matching ""