构建首个集成应用(Bundle)

在开始前,为了能够更好的了解如何开发,我们先假设以下的场景:

  • (假设)你现已有一个自建安全管控SDK(lib-security-1.0.aar),SDK需要在App启动时完成初始化,即调用SecurityManager.init()函数,SDK可用于开启水印、网络、文件存储等的底层管控。

下面我们就将这个SDK改造成专有钉钉的集成应用(Bundle)并集成测试。

使用专有钉钉开发工具包

下载地址:开发工具包

(1)解压dingtalk-opentools-xx.zip到任意目录。
(2)修改包内的config.cfg文件:

  1. projectFolder=/Users/Downloads/ding-bundle/ // 期望的工程目录
  2. projectName=Bundle-Security // 期望创建的专有钉钉扩展插件工程名字
  3. packageName=com.security.bundle // 期望创建的专有钉钉扩展插件包名
  4. productName=lib-security // 期望的最终构建产物名

(3)调用init脚本(请先确认本机已经安装了python环境)

  1. ./init
  2. 或者
  3. python init.py

执行结果如下图:
image.png
下图是初始化完成的工程目录:
image.png

  • ./Bundle-Security 是可执行的Android空项目,项目已经配置了专有钉钉的开发框架依赖,可直接使用Android Studio打开创建的工程并开发。
  • ./Android-DingtalkMock 是开发完成后进行单元测试的Mock工程
  • ./mvn包含了专有钉钉的依赖库,请不要删除。

    注意:专有钉钉扩展Android项目和/mvn目录是配合存在的,如果期望更换目录可整体迁移。

添加 lib-security-1.0.aar

工程初始化完成后,我们需要将自建安全sdk拷贝到

  • 拷贝lib-security-1.0.aar到Bundle-Security/lib-bundle/libs 目录中。
  • build.gradle中添加依赖:implementation(name:‘lib-security-1.0’, ext:‘aar’)

    生成BundleID

    每个专有钉钉的集成应用均会生成一个唯一的BundleID用于作为集成应用的唯一标识。

如何生成BundleID
前往开放平台创建集成应用并获取应用标识(BundleId)
图中的基础信息-凭证与基础信息-应用标识,即为BundleId
image.png
本文中示例:securitysdk

添加初始化SDK代码

当你需要在启动初始化业务代码时,你可以使用自动生成的类:MainBundle。

  1. @Bundle
  2. public class MainBundle extends BundleApplication {
  3. // 该值需要同专有钉钉提前约定好,用于作为bundle的唯一身份标识,且务必同bundle.xml配置相同
  4. public static final String BUNDLE_ID = "securitysdk";
  5. private static BundleContext bundleContext;
  6. public static BundleContext getBundleContext() {
  7. return bundleContext;
  8. }
  9. @Override
  10. public String getBundleId() {
  11. return BUNDLE_ID;
  12. }
  13. @Override
  14. public void onApplicationCreate(BundleContext context) {
  15. super.onApplicationCreate(context);
  16. this.bundleContext = context;
  17. }
  18. }

使用专有钉钉平台的Service

完成自身业务的初始化后,你可能还需要打印一些日志信息,便于线上排查问题。此时可以使用专有钉钉平台提供的日志服务(LogService)。
BundleContext提供了获取Service的能力,开发者可根据需要获取并使用,更多Service请参考后续章节。

如下代码:

  1. @Override
  2. public void onApplicationCreate(@NotNull BundleContext context) {
  3. super.onApplicationCreate(context);
  4. // 执行初始化代码
  5. SecurityManager.init();
  6. LogService logService = context.getService(LogService.class);
  7. if (logService != null) {
  8. logService.info("tag", "hello, world!");
  9. }
  10. }

完善 bundle.xml

类似Android的AndroidManifest.xml文件,bundle.xml 用于定义集成应用的开发者信息、需要使用的权限声明等必要信息。

  • bundle.xml 请定义在 /src/main/resources/META-INF目录下(默认初始化工具自动创建)。
  • id字段代表BundleID,必填且和代码中使用的保持一致。

image.png

运行与调试Bundle

单元测试

参考章节 专有钉钉Mock工具使用指南

集成测试

前往开放平台发起集成应用集成测试流程;
完成测试后参考 测试报告 编写一份报告并上传到开放平台;

发布扩展bundle

前往开放平台发起集成应用发布流程

至此,你已经完成了一个可以在专有钉钉开放平台运行的“Hello World”,对于更丰富的功能请参考具体的扩展点描述文档。