构建首个集成应用(Bundle)
在开始前,为了能够更好的了解如何开发,我们先假设以下的场景:
- (假设)你现已有一个自建安全管控SDK(lib-security-1.0.aar),SDK需要在App启动时完成初始化,即调用SecurityManager.init()函数,SDK可用于开启水印、网络、文件存储等的底层管控。
下面我们就将这个SDK改造成专有钉钉的集成应用(Bundle)并集成测试。
使用专有钉钉开发工具包
下载地址:开发工具包
(1)解压dingtalk-opentools-xx.zip到任意目录。
(2)修改包内的config.cfg文件:
projectFolder=/Users/Downloads/ding-bundle/ // 期望的工程目录
projectName=Bundle-Security // 期望创建的专有钉钉扩展插件工程名字
packageName=com.security.bundle // 期望创建的专有钉钉扩展插件包名
productName=lib-security // 期望的最终构建产物名
(3)调用init脚本(请先确认本机已经安装了python环境)
./init
或者
python init.py
执行结果如下图:
下图是初始化完成的工程目录:
- ./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
本文中示例:securitysdk
添加初始化SDK代码
当你需要在启动初始化业务代码时,你可以使用自动生成的类:MainBundle。
@Bundle
public class MainBundle extends BundleApplication {
// 该值需要同专有钉钉提前约定好,用于作为bundle的唯一身份标识,且务必同bundle.xml配置相同
public static final String BUNDLE_ID = "securitysdk";
private static BundleContext bundleContext;
public static BundleContext getBundleContext() {
return bundleContext;
}
@Override
public String getBundleId() {
return BUNDLE_ID;
}
@Override
public void onApplicationCreate(BundleContext context) {
super.onApplicationCreate(context);
this.bundleContext = context;
}
}
使用专有钉钉平台的Service
完成自身业务的初始化后,你可能还需要打印一些日志信息,便于线上排查问题。此时可以使用专有钉钉平台提供的日志服务(LogService)。
BundleContext提供了获取Service的能力,开发者可根据需要获取并使用,更多Service请参考后续章节。
如下代码:
@Override
public void onApplicationCreate(@NotNull BundleContext context) {
super.onApplicationCreate(context);
// 执行初始化代码
SecurityManager.init();
LogService logService = context.getService(LogService.class);
if (logService != null) {
logService.info("tag", "hello, world!");
}
}
完善 bundle.xml
类似Android的AndroidManifest.xml文件,bundle.xml 用于定义集成应用的开发者信息、需要使用的权限声明等必要信息。
- bundle.xml 请定义在 /src/main/resources/META-INF目录下(默认初始化工具自动创建)。
- id字段代表BundleID,必填且和代码中使用的保持一致。
运行与调试Bundle
单元测试
参考章节 专有钉钉Mock工具使用指南
集成测试
前往开放平台发起集成应用集成测试流程;
完成测试后参考 测试报告 编写一份报告并上传到开放平台;
发布扩展bundle
前往开放平台发起集成应用发布流程
至此,你已经完成了一个可以在专有钉钉开放平台运行的“Hello World”,对于更丰富的功能请参考具体的扩展点描述文档。