更新时间:2024-06-26 02:02:49下载pdf
本文提供手把手教程,介绍如何集成业务拓展 SDK,通过少量代码,从零开始实现一个简单的家庭、设备和家庭成员之间互动的 App。
在实现功能以前,按照以下要求准备开发环境:
AppKey
和 AppSecret
。security-algorithm-1.0.0-beta.aar
文件。本小节介绍如何创建项目并为项目添加体验业务拓展 SDK 所需的权限。
(可选)创建新项目。详见 Create a project。
创建项目后,Android Studio 会自动开始同步 gradle,稍等片刻至同步成功后,再进行下一步操作。
添加网络及设备权限。打开 /app/manifests/AndroidManifest.xml
文件,在 <application/>
后面添加如下权限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
设备配网激活需要其他权限,例如定位和蓝牙权限。参考设备配网教程,根据需要进行添加。
配置混淆规则。打开 /app/proguard-rules.pro
文件,添加如下代码,以便防止涂鸦 SDK 的代码被混淆。如果已有,可忽略。
#fastJson
-keep class com.alibaba.fastjson.**{*;}
-dontwarn com.alibaba.fastjson.**
#mqtt
-keep class com.thingclips.smart.mqttclient.mqttv3.** { *; }
-dontwarn com.thingclips.smart.mqttclient.mqttv3.**
#OkHttp3
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-dontwarn okhttp3.**
-keep class okio.** { *; }
-dontwarn okio.**
-keep class com.thingclips.**{*;}
-dontwarn com.thingclips.**
# Matter SDK
-keep class chip.** { *; }
-dontwarn chip.**
打开项目根目录下的 build.gradle
文件,添加 Maven Central 依赖。如果已有,可忽略。
buildscript {
repositories {
maven { url 'https://maven-other.tuya.com/repository/maven-releases/' }
maven { url "https://maven-other.tuya.com/repository/maven-commercial-releases/" }
google()
mavenCentral()
mavenLocal()
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://central.maven.org/maven2/' }
}
dependencies {
classpath 'com.android.tools.build:gradle:7.4.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.10"
}
}
allprojects {
repositories {
maven { url 'https://maven-other.tuya.com/repository/maven-releases/' }
maven { url "https://maven-other.tuya.com/repository/maven-commercial-releases/" }
google()
mavenCentral()
mavenLocal()
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://central.maven.org/maven2/' }
maven { url "https://jitpack.io" }
}
configurations.all {
exclude group:"com.thingclips.smart",module:"thingplugin-annotation"
exclude group:"com.thingclips.android.module",module:"thingmodule-annotation"
exclude group: "com.thingclips.smart" ,module: 'thingsmart-modularCampAnno'
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
}
如果您使用的是新版本 Android Gradle 插件 DSL 元素结构,可参考如下配置:
//setting.gradle 配置
pluginManagement {
repositories {
google()
mavenCentral()
gradlePluginPortal()
mavenLocal()
maven { url 'https://maven-other.tuya.com/repository/maven-releases/' }
maven { url "https://maven-other.tuya.com/repository/maven-commercial-releases/" }
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://central.maven.org/maven2/' }
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
mavenLocal()
maven { url 'https://maven-other.tuya.com/repository/maven-releases/' }
maven { url "https://maven-other.tuya.com/repository/maven-commercial-releases/" }
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://central.maven.org/maven2/' }
maven { url "https://jitpack.io" }
}
}
//build.gradle
plugins {
id 'com.android.application' version '7.4.2' apply false
id 'com.android.library' version '7.4.2' apply false
id 'org.jetbrains.kotlin.android' version '1.8.0' apply false
}
subprojects {
configurations.all {
exclude group:"com.thingclips.smart",module:"thingplugin-annotation"
exclude group:"com.thingclips.android.module",module:"thingmodule-annotation"
exclude group: "com.thingclips.smart" ,module: 'thingsmart-modularCampAnno'
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
}
ext {
kotlin_version = '1.8.0'
sdk_version = '5.8.0'
expansion_version='5.8.2'
}
运行或调试项目,打开 /app/build.gradle
文件,在 android
中添加 signingConfigs
的配置。
从 IDE 中运行或调试您的项目时,Android Studio 会自动使用由 Android SDK 工具生成的 调试证书 为您的应用签名。如果您首次在 Android Studio 中运行或调试项目时,IDE 会自动在 $HOME/.android/debug.keystore
中创建调试密钥库和证书,并设置密钥库和密钥密码。
生成签名报告
如果想要查看将要运行的 App 的签名信息报告,请在 Android Studio 中运行 Gradle signingReport
任务,生成签名报告。
也可以直接使用命令行执行:
./gradlew signingReport
。gradlew.bat
脚本执行,运行以下命令 gradlew.bat signingReport
。查看签名信息
执行 signingReport
任务以后,可以查看对应变体的签名信息,如下图所示,是 debug 变体下的签名信息。
由于调试证书的应用签名不安全,不能用于应用发布和上架,可参考 Android 官方文档 调试证书 获取上架的正式证书。
对于获取到的 SHA-256 加密字符串,登录涂鸦开发者平台,选择 App > App SDK > SDK 开发,单击项目,到 获取秘钥 页签 设置 SHA256,不然会提示 非法客户端。
android {
...
signingConfigs {
debug {
storeFile file("./debug.keystore") //1.可指定调试证书目录,作为调试使用
storePassword "android"
keyAlias "AndroidDebugKey"
keyPassword "android"
v1SigningEnabled true
v2SigningEnabled true
}
}
...
}
打开 /app/build.gradle
文件,在 android
中添加 defaultConfig
的配置 applicationId
、appKey
、appSecret
以及 ndk
配置。
android {
...
defaultConfig {
applicationId "com.thing.appbizsdk.sample" //使用 App SDK 的包名,"com.thing.appbizsdk.sample" 为示例
...
//在项目根目录 local.properties 文件,设置属性 appKey 和 appSecret
//appKey=your_app_key
//appSecret=your_app_secret
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
manifestPlaceholders = [
TUYA_SMART_APPKEY : "${properties.getProperty("appKey")}",
TUYA_SMART_SECRET : "${properties.getProperty("appSecret")}",
PACKAGE_NAME : applicationId
]
ndk {
abiFilters "armeabi-v7a", "arm64-v8a"
}
}
...
}
打开 /app/build.gradle
文件,在 android
中添加 packagingOptions
的配置。
android {
...
packagingOptions {
pickFirst 'lib/*/libc++_shared.so' // 多个 aar 存在此 so,需要选择第一个
pickFirst 'lib/*/liblog.so'
pickFirst 'lib/*/libopenh264.so'
}
...
}
打开 /app/build.gradle
文件,在 dependencies
中添加 业务拓展 SDK 和 智能生活 App SDK 的依赖。您可以从发版说明中查询 SDK 的最新版本,并将 sdk_version
和 expansion_version
替换为具体的版本号。
...
dependencies {
//记得添加安全资源包中的 security-algorithm-1.0.0-beta.aar 到 app/libs 下
implementation fileTree(dir: "libs", include: ["*.jar","*.aar"])
...
implementation "com.thingclips.smart:thingsmart:${sdk_version}"
implementation "com.thingclips.smart:thingsmart-expansion-sdk:${expansion_version}"
//以下如果已有,请忽略
implementation 'com.alibaba:fastjson:1.1.67.android'
implementation 'com.squareup.okhttp3:okhttp-urlconnection:3.14.9'
...
}
初始化 SDK。您需要在 Application 的主线程中初始化 SDK,确保所有进程都能初始化。示例代码如下:
class TuyaSmartApp:Application() {
override fun onCreate() {
super.onCreate()
ThingHomeSdk.setDebugMode(BuildConfig.DEBUG)
ThingHomeSdk.init(this)
ThingOptimusSdk.init(this)
}
}
关于具体的实现流程,参考以下文档:
涂鸦在 GitHub 上提供了一个开源的业务拓展 SDK 示例项目 BizSdkSample,供您参考。
开发文档中详细列出了所有接口详情以及使用示例,供您参考查阅:
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈