-
Notifications
You must be signed in to change notification settings - Fork 81
Home
米家扩展程序接入方式已完全更新,请阅读《新扩展程序开发指南》进行开发
本质原理,米家APP通过Android提供的DexClassLoader技术动态加载开发者上传的扩展程序APK。开发者开发米家扩展程序的方式与Android原生APP的方式一样,只是没法直接使用系统原生的Activity、Service、Receiver、Provider组件,只能调用米家扩展程序SDK封装好的组件和接口。
米家扩展程序也是基于Android环境开发的,开发扩展程序的时候请确保Android配置信息(比如compileSdkVersion、minSdkVersion、targetSdkVersion)与米家最新版本保持一致。
如下示例了部分提供的功能,更丰富的接口功能可浏览文档说明。
说明:当扩展程序有更新时,WiFi网络下打开米家APP时,米家APP会自动更新最新的扩展程序。非WiFi网络下,打开米家APP的设置页面,然后点击检查更新,可以手动更新扩展程序。
说明:必须得先在小米IoT开放平台配置好扩展程序后才能进行下一步开发。
-
申请开发者账号developerId
-
登记新产品,记录设备model
按照下图所示,点击“创建新硬件”:
-
创建Android扩展程序
创建好新产品后,在“我的硬件”页面点击新创建产品的“开发”按钮,进入下图所示页面,然后按图所示点击“创建扩展程序”后即可配置Android扩展程序,再后面就按照提示输入开发者developerId、扩展程序包名等信息:
-
创建签名证书
创建方式:就是通用的Android APK签名证书生成方式。
-
创建米家扩展程序信息,提交证书md5信息
签名文件的md5信息获取,需要去掉:号 说明:不要使用Java10版本的keytool,使用Java8及以下版本的keytool keytool -list -v -keystore keyFilePath -storepass keypassword -keypass keypassword
证书md5信息详细提交方式:
1)使用上述申请developerId的账号登录小米IoT开放平台
2)点击右上角个人信息页面,打开个人开发者页面
3)在个人开发者页面的“扩展程序公钥”框输入上述md5信息
-
配置账号白名单
如果开发者如果不是用注册开发者的小米账号登录的话,需要把当前的小米账号配置成协作开发或者测试白名单:
- Android Studio
- 安装Android Studio,并且关闭Instant Run模式
- 下载米家扩展程序SDK
- SDK下载
- SDK包含运行库、米家APP提供给扩展程序的各种功能API、常用的UI组件
- 另外SDK还提供了示例工程,可供开发者引入参考
- 安装调试版米家APP
SDK的plugProject目录下包含了米家扩展程序示例工程,可供扩展程序开发参考:
- EmptyDemo
- 演示了最基本空的米家扩展程序工程,用于了解米家扩展程序的基本结构
- xiaomi_bledemov2
- 演示了蓝牙锁相关API
- PluginDemo
- 演示了给米家扩展程序提供的大部分UI组件以及相关功能API
- 安装完示例米家扩展程序后,点击小米开发板设备,可以看到实例效果
- 说明:必须得使用米家APP测试账号才能运行示例米家扩展程序,测试账号如下:
用户名:923522198
,密码:123asdzxc
下面演示如何运行米家扩展程序Demo。
说明:如果要调试某个设备的米家扩展程序,必须在米家APP中已经添加了这个设备,否则没法调试。
-
从github下载NewXmPluginSDK工程
-
安装工程根目录下提供的米家调试APK
应用商店版本米家APP是没有办法调试米家扩展程序的,只能安装工程根目录下单独提供的米家调试APK
-
使用测试账号登录
打开米家APP,登录如下测试账号:
用户名:923522198
,密码:123asdzxc
这个测试账号里已经添加了“小米开发板”这个设备,下面演示如何调试这个设备的米家扩展程序。
-
Android Studio打开下载的NewXmPluginSDK工程
-
按照如下步骤修改米家扩展程序功能的配置
说明:米家提供的米家扩展程序工程是没有Launch Activity的,Android Studio默认会提示错误,没法直接Run/Debug米家扩展程序工程,因此需要修改下Android Studio配置。
1)点击Edit Configurations打开配置页面
2)点击Android App下的PluginDemo一项,找到Launch Options,把Launch选项改为Nothing,然后点击“OK”保存退出
3)同步Gradle
-
通过USB线连接手机和电脑
确保手机已经打开了USB调试开关,并且同意当前电脑连接手机。
-
运行PluginDemo米家扩展程序
有两种方法运行米家扩展程序:
1)通过Android Studio直接Run
2)通过命令行运行米家扩展程序
通过gradle指令编译运行,在NewXmPluginSDK根目录下命令行执行:
PluginDemo为米家扩展程序工程名 ./gradlew installPluginDemoDebug 安装运行debug配置米家扩展程序 ./gradlew installPluginDemoRelease 安装运行release米家扩展程序
通过上述两种方式运行米家扩展程序的时候,会通过命令行重启米家APP(运行过程中米家APP会退出重新再进一次,这是正常现象)。如果运行成功,会先弹“从SD卡读取成功”的Toast,然后再弹“安装成功”的Toast。这个时候再点击进入“小米开发板”这个设备,运行的就是当前工程下的PluginDemo米家扩展程序,而不是云端下发的米家扩展程序。
注意:本地运行米家扩展程序成功后,更新的只是本地的扩展程序;如果要更新云端的扩展程序,还需要到小米Iot开放平台上传新的扩展程序。
如何确定米家扩展程序内容更新成功,替换了云端下发的默认米家扩展程序?
一个小技巧就是,在PluginDemo工程MainActivity的onCreate里打印一些Log或者是Toast弹出一些信息,如果进入设备的时候打印或Toast出了相关信息就说明米家扩展程序本地替换成功了。
-
调试PluginDemo米家扩展程序
可以像调试Android App一样调试米家扩展程序。
1)安装上米家扩展程序后,会自动启动米家APP,点击Android Studio调试按钮:
2)选择com.xiaomi.smarthome:plugin0进程(如果不行,选择com.xiaomi.smarthome进程调试),如下图所示按钮:
3)然后就可以在米家扩展程序代码中打断点调试了。
再次说明下:必须在米家APP中已经了添加了某个设备后,才能调试运行这个设备的米家扩展程序,不然没法调试运行米家扩展程序。
-
有真实的设备测试:
1)米家APP中扫描设备;
2)连接设备(不同设备连接过程可能不一样,按照提示引导进行);
3)连接成功后就可以进入米家扩展程序进行功能测试了;
4)米家扩展程序的调试可以参考上述PluginDemo工程进行。
-
暂时没有真实设备:
如果开发者暂时没有真实的设备,想跳过连接过程直接打开米家扩展程序,可以添加一个虚拟的设备到米家APP中调试米家扩展程序。
在米家APP里选中“我的” -> "设置" -> "开发者选项"中打开“是否开启无设备开发模式”。
然后点击米家APP首页右上角的"+"按钮进入添加设备页面,再点击"手动添加"按钮,长按要调试的设备,即可进入设备添加页面,点击"添加"按钮,就可以添加一个虚拟的设备到米家APP了。这个虚拟的设备只能用来调试UI功能,如果要调试设备连接或设备信息获取相关功能,只能添加真实的设备后再进行。
如果在手动添加打开的页面没有看所要调试的设备,确认下:
1)在小米IoT开放平台米家扩展程序已经创建成功;
2)打开开发引导页面,选中“平台使用指南”,再点击“智能硬件直连接入”,最后点击“Step 3: 配置功能物料”,参考文中的基础配置;
3)当前账号已经添加到了白名单里;
4)需要在小米IoT开放平台有上传扩展程序(首次开发,上传一个内容为空的扩展程序也可以),否则的话会提示添加失败。
米家扩展程序开发完成,测试通过后,可以到米家后台申请上线,编译好的安装包在对应米家扩展程序工程/build/outputs/apk下面。注意:上传的扩展程序APK必须要正式签名,而且签名文件要与在开发者平台提交的签名信息一致。
除了功能测试通过,必须要注意进行内存测试,原则上在退出米家扩展程序页面后,米家扩展程序需要退出所有的后台线程,释放所有的内存资源,特别是Activity对象的内存泄露 上线审核前,会专门针对这两项测试。