Camera SDK Integration
1. Overview
This document mainly introduces how to integrate the Camera Vertical Category SDK.
2. Prerequisites
- Confirm completion of Preparation
- Confirm completion of Environment Build
3. Features
3.1 Core Functions
- Supports Aqara camera pairing
- Supports Aqara camera real-time preview, playback, two-way audio, and other playback capabilities
- Supports Aqara camera control and settings
3.2 SDK Size
| Dependency | Description | Size |
|---|---|---|
| Camera Playback | Playback, P2P | About 24MB |
| Camera Control & Settings | Settings items and control capabilities | About 22MB |
| Other third-party open-source components | Components required for SDK operation | About 24MB |
| Total | - | About 70MB |
Note: About 70MB is the maximum incremental size of SDK integration, which occurs when there is no overlap between the third-party app’s dependencies and those of the SDK. In most cases, it will be smaller.
3.3 Supported Device Categories
See Camera SDK Supported Device List for details.
3.4 Build Environment Requirements
| Parameter | Version | Description |
|---|---|---|
| minSdkVersion | 26 | Android 8.0 |
| targetSdkVersion | 36 | Recommended to keep consistent with the sample project |
| Java | 17 | / |
4. Integration
4.1 Open the Android Studio Project
4.2 Edit build.gradle in the app Directory
After completing Environment Build, add the camera and related dependencies:
dependencies {
// Core / CommonUI (already introduced in Environment Build)
implementation 'com.lumi.external:core:2.2.62'
implementation 'com.lumi.commonui:ui:1.5.33'
// Pairing SDK (required for camera onboarding)
implementation 'com.lumi.module.access:access:3.5.82'
implementation 'com.lumi.module.smart_connect:connect:4.0.37'
implementation 'com.lumi.module:scanQR:1.0.14'
implementation 'com.lumi.module:devicekit:1.0.23'
// Camera SDK
implementation 'com.lumi.sdk:camera:3.2.584'
// Device control / routing / settings
implementation 'com.lumi.sdk:rmextra:2.0.10'
implementation 'com.lumi.sdk:device-router:1.0.10'
implementation 'com.lumi.sdk:module-setting:2.0.35'
}
Use the version numbers from the sample project or The Latest Version of the SDK. When integrating multiple business SDKs, it is recommended to configure
packagingOptionsand zxing conflict exclusion together; see Environment Build.
Recommended configuration:
android {
packagingOptions {
jniLibs {
pickFirsts += ['lib/arm64-v8a/libc++_shared.so', 'lib/armeabi-v7a/libc++_shared.so']
}
}
}
configurations.configureEach {
exclude group: 'com.google.zxing', module: 'core'
}
4.3 Edit AndroidManifest.xml
Declare permissions commonly used by camera features (some permissions may also be merged automatically from the SDK AAR):
<!-- Network permissions -->
<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" />
<!-- Storage permissions (screenshot and recording save) -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- Bluetooth / location permissions (used for pairing) -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<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.ACCESS_COARSE_LOCATION" />
<!-- Microphone permission (two-way audio) -->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
Face management, image sharing, and similar capabilities require a FileProvider configuration:
<application>
...
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/lm_rm_extra_file_paths" />
</provider>
</application>
res/xml/lm_rm_extra_file_paths.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<paths>
<cache-path path="" name="camera_photos"/>
<external-path path="" name="camera_photos" />
<files-path path="" name="camera_photos" />
<root-path path="" name="camera_photos" />
<external-files-path name="share_files" path="."/>
</paths>
</resources>
4.4 Initialization
See Environment Build - Unified Initialization.
Before camera onboarding, make sure the following are configured correctly:
positionInfo(home / position ID)coapServer(device onboarding domain matching the current service region)country/area/supportDeviceArea(it is recommended to determinecountryfirst, then look up the corresponding values; see Region Comparison Table)sdkChannel(channel identifier; some settings capabilities depend on this parameter)
4.5 Unified RxJava Error Handling
The Camera SDK uses a large amount of RxJava. It is recommended to handle uncaught exceptions uniformly in Application to avoid individual exceptions crashing the app:
override fun onCreate() {
super.onCreate()
RxJavaPlugins.setErrorHandler {
it.printStackTrace()
}
}
5. Code Obfuscation
-keep class com.lumi.ed.** {*;}
-keep class tv.danmaku.ijk.media.player.** {*;}
-keep class com.p2p.pppp_api.** {*;}
-keep class com.lumi.rm.** {*;}