鸿蒙开源组件——跨设备应用开发框架
OH-DADF
OpenHarmony-Distributed Application Devlopment Framework
基于OpenHarmonyOS自主研发一个开源的跨设备应用开发框架,实现多种分布式业务的快速开发。本框架基于OpenHarmony SDK和JDK实现,采用多层封装的模式服务不同水平的开发者,达到简化开发的目标。
由于个人的力量是有限的,欢迎大家提出意见和建议,共同开发。
项目介绍
-
项目名称:分布式应用开发框架
-
所属系列:OpenHarmony第三方组件
-
功能:简化分布式应用开发
-
开发版本:sdk5,DevEco Studio2.1 Release
-
项目作者和维护人:吴圣垚
-
编程语言:Java
-
安装教程
-
下载OH-DADF的har包OH-DADF.har
-
启动 DevEco Studio,将下载的har包,导入工程目录“entry->libs”下。
-
在moudle级别下的build.gradle文件中添加依赖,在dependences标签中增加对libs目录下jar包的引用,然后执行gradle sync。
-
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar', '*.har'])
……
}
- 如仍无法识别har包,可以尝试在har包上点击右键,选择“Add as Library”对包进行引用,选择需要引用的模块,并点击“OK”即引用成功。
使用说明
- 分布式场景一:分布式任务启动/停止
1.1 控件层封装StartAbilityContainer
提供了高度封装的StartAbilityContainer,使用者只需在其UI中植入StartAbilityContainer实例即可实现设备发现、分布式任务启动、停止等功能。
例如,直接将StartAbilityContainer作为根UI,短短几行,十分方便:
//权限
requestPermissionsFromUser(Permissons.getBasePermissons(),0);
//调用控件
StartAbilityContainer startAbilityContainer = new StartAbilityContainer(this);
super.setUIContent(startAbilityContainer);
大致效果如下:
1.2 函数层封装StartManager
相比Component级封装程度较低,但更灵活自由,使用者可以自由选择。
2.分布式场景二:分布式任务连接/发送
仅通过启动/停止两种方式对PA进行调度无法应对需长期交互的场景,因此,OH-DADF基于OpenHamonyOS提供了便捷的分布式任务连接及发送的能力。
2.1 AbstractProxy
基于OpenHarmonyOS的IRemoteBroker,本框架提供AbstractProxy类自动化管理连接后的交互,使用者只需根据自身业务重写task()方法即可。
// IAbilityConnection是OpenHarmonyOS自带的类,使用它的回调函数来管理连接关系
private IAbilityConnection mConn = new IAbilityConnection() {
@Override
public void onAbilityConnectDone(ElementName element, IRemoteObject remote, int resultCode) {
// 跨设备PA连接完成后,会触发本回调
MessageOption option = new MessageOption(MessageOption.TF_SYNC);
// 创建AbstractProxy实例
mProxy = new AbstractProxy(remote,option) {
@Override
public void task() throws RemoteException {
//写自己的业务逻辑即可,例如这里想要执行一个1+1的加法运算
mytask(1,1);
}
};
Log.info("PA","连接远程PA已完成");
}
@Override
public void onAbilityDisconnectDone(ElementName element, int resultCode) {
// 当已连接的远端PA关闭时,会触发本回调
Log.info("PA","断开远程PA已完成");
}
};
private void mytask(int a, int b) throws RemoteException {
//创建data
MessageParcel data = MessageParcel.obtain();
data.writeInt(a);
data.writeInt(b);
//将data设置给Proxy
mProxy.setData(data);
//将data发送给远端处理
mProxy.sendRequest();
//获取远端返回的结果
int result = mProxy.getReply().readInt();
mProxy.getReply().reclaim();
//打印结果
btnControlRemotePA.setText("计算结果 = " + result);
};
2.2 控件层封装ConnectAbilityContainer
提供了高度封装的ConnectAbilityContainer,使用者只需在其UI中植入ConnectAbilityContainer实例 即可实设备发现、分布式任务连接、发送、断开等功能。
例如,直接将ConnectAbilityContainer作为根UI,相比分布式场景一,仅多了一行代码用于将IAbilityConnection实例传给ConnectAbilityContainer:
//权限
requestPermissionsFromUser(Permissons.getBasePermissons(),0);
//调用控件
ConnectAbilityContainer connectAbilityContainer = new ConnectAbilityContainer(this);
connectAbilityContainer.setIAbilityConnection(mConn);
super.setUIContent(connectAbilityContainer);
大致效果如下:
首先点击连接,成功后就可以点击执行按钮来开始执行自己的业务逻辑了,完成后点击断开。
2.3 函数层封装ConnectManager
相比Component级封装程度较低,但更灵活自由,使用者可以自由选择。
3.分布式场景三:分布式应用程序迁移
分布式应用程序迁移部分与OpenHarmonyOS提供的能力相差不大,都是使用AbilitySlice继承IAbilityContinuation来完成的,感兴趣可以参考官方文档。后续打算推出基于AbilitySlice的各种业务模板,简化开发。
这边提供了一个简单的分布式记事本demo,大致效果如下:
当输入一些文字后,点击保存然后点击迁移,这个应用会在迁移到另一个设备上(如果有多个设备满足启动条件,会弹出选择框),输入的文字信息保持不变。
版本迭代
- v0.1.0-alpha 目前还很初级,以下是大致的完成情况。
版权和许可信息
- OH-DADF经过Apache License, version 2.0授权许可。