Skip to content

01 米家扩展程序整体简介

liYueAliyun edited this page Sep 19, 2019 · 2 revisions

米家扩展程序Android开发手册 (已废弃!!!)

请使用 《新扩展程序开发指南》

米家扩展程序接入方式已完全更新,请阅读《新扩展程序开发指南》进行开发

米家扩展程序原理

本质原理,米家APP通过Android提供的DexClassLoader技术动态加载开发者上传的扩展程序APK。开发者开发米家扩展程序的方式与Android原生APP的方式一样,只是没法直接使用系统原生的Activity、Service、Receiver、Provider组件,只能调用米家扩展程序SDK封装好的组件和接口。

米家扩展程序也是基于Android环境开发的,开发扩展程序的时候请确保Android配置信息(比如compileSdkVersion、minSdkVersion、targetSdkVersion)与米家最新版本保持一致。

米家扩展程序整体框架描述

米家APP提供给扩展程序的接口功能

如下示例了部分提供的功能,更丰富的接口功能可浏览文档说明。

米家扩展程序整体开发流程

说明:当扩展程序有更新时,WiFi网络下打开米家APP时,米家APP会自动更新最新的扩展程序。非WiFi网络下,打开米家APP的设置页面,然后点击检查更新,可以手动更新扩展程序。

在小米IoT开放平台配置扩展程序信息

说明:必须得先在小米IoT开放平台配置好扩展程序后才能进行下一步开发。

  1. 登陆小米IoT开放平台

  2. 申请开发者账号developerId

  3. 登记新产品,记录设备model

    按照下图所示,点击“创建新硬件”:

  4. 创建Android扩展程序

    创建好新产品后,在“我的硬件”页面点击新创建产品的“开发”按钮,进入下图所示页面,然后按图所示点击“创建扩展程序”后即可配置Android扩展程序,再后面就按照提示输入开发者developerId、扩展程序包名等信息:

  5. 创建签名证书

    创建方式:就是通用的Android APK签名证书生成方式。

  6. 创建米家扩展程序信息,提交证书md5信息

    签名文件的md5信息获取,需要去掉:号
    说明:不要使用Java10版本的keytool,使用Java8及以下版本的keytool
    
    keytool -list -v -keystore  keyFilePath -storepass keypassword  -keypass  keypassword
    

    证书md5信息详细提交方式:

    1)使用上述申请developerId的账号登录小米IoT开放平台

    2)点击右上角个人信息页面,打开个人开发者页面

    3)在个人开发者页面的“扩展程序公钥”框输入上述md5信息

  7. 配置账号白名单

    如果开发者如果不是用注册开发者的小米账号登录的话,需要把当前的小米账号配置成协作开发或者测试白名单:

开发准备

  • 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

运行和调试PluginDemo米家扩展程序

下面演示如何运行米家扩展程序Demo。

说明:如果要调试某个设备的米家扩展程序,必须在米家APP中已经添加了这个设备,否则没法调试。

  1. github下载NewXmPluginSDK工程

  2. 安装工程根目录下提供的米家调试APK

    应用商店版本米家APP是没有办法调试米家扩展程序的,只能安装工程根目录下单独提供的米家调试APK

  3. 使用测试账号登录

    打开米家APP,登录如下测试账号:用户名:923522198, 密码:123asdzxc

    这个测试账号里已经添加了“小米开发板”这个设备,下面演示如何调试这个设备的米家扩展程序。

  4. Android Studio打开下载的NewXmPluginSDK工程

  5. 按照如下步骤修改米家扩展程序功能的配置

    说明:米家提供的米家扩展程序工程是没有Launch Activity的,Android Studio默认会提示错误,没法直接Run/Debug米家扩展程序工程,因此需要修改下Android Studio配置。

    1)点击Edit Configurations打开配置页面

    2)点击Android App下的PluginDemo一项,找到Launch Options,把Launch选项改为Nothing,然后点击“OK”保存退出

    3)同步Gradle

  6. 通过USB线连接手机和电脑

    确保手机已经打开了USB调试开关,并且同意当前电脑连接手机。

  7. 运行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出了相关信息就说明米家扩展程序本地替换成功了。

  8. 调试PluginDemo米家扩展程序

    可以像调试Android App一样调试米家扩展程序。

    1)安装上米家扩展程序后,会自动启动米家APP,点击Android Studio调试按钮:

    2)选择com.xiaomi.smarthome:plugin0进程(如果不行,选择com.xiaomi.smarthome进程调试),如下图所示按钮:

    3)然后就可以在米家扩展程序代码中打断点调试了。

测试米家扩展程序

再次说明下:必须在米家APP中已经了添加了某个设备后,才能调试运行这个设备的米家扩展程序,不然没法调试运行米家扩展程序。

  1. 有真实的设备测试:

    1)米家APP中扫描设备;

    2)连接设备(不同设备连接过程可能不一样,按照提示引导进行);

    3)连接成功后就可以进入米家扩展程序进行功能测试了;

    4)米家扩展程序的调试可以参考上述PluginDemo工程进行。

  2. 暂时没有真实设备:

    如果开发者暂时没有真实的设备,想跳过连接过程直接打开米家扩展程序,可以添加一个虚拟的设备到米家APP中调试米家扩展程序。

    在米家APP里选中“我的” -> "设置" -> "开发者选项"中打开“是否开启无设备开发模式”。

    然后点击米家APP首页右上角的"+"按钮进入添加设备页面,再点击"手动添加"按钮,长按要调试的设备,即可进入设备添加页面,点击"添加"按钮,就可以添加一个虚拟的设备到米家APP了。这个虚拟的设备只能用来调试UI功能,如果要调试设备连接或设备信息获取相关功能,只能添加真实的设备后再进行。

    如果在手动添加打开的页面没有看所要调试的设备,确认下:

    1)在小米IoT开放平台米家扩展程序已经创建成功;

    2)打开开发引导页面,选中“平台使用指南”,再点击“智能硬件直连接入”,最后点击“Step 3: 配置功能物料”,参考文中的基础配置;

    3)当前账号已经添加到了白名单里;

    4)需要在小米IoT开放平台有上传扩展程序(首次开发,上传一个内容为空的扩展程序也可以),否则的话会提示添加失败。

上传米家扩展程序

米家扩展程序开发完成,测试通过后,可以到米家后台申请上线,编译好的安装包在对应米家扩展程序工程/build/outputs/apk下面。注意:上传的扩展程序APK必须要正式签名,而且签名文件要与在开发者平台提交的签名信息一致。

除了功能测试通过,必须要注意进行内存测试,原则上在退出米家扩展程序页面后,米家扩展程序需要退出所有的后台线程,释放所有的内存资源,特别是Activity对象的内存泄露 上线审核前,会专门针对这两项测试。

Clone this wiki locally