# OH-DADF **Repository Path**: isrc_ohos/oh-dadf ## Basic Information - **Project Name**: OH-DADF - **Description**: 基于OpenHarmony的分布式应用开发框架 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 0 - **Created**: 2021-06-04 - **Last Updated**: 2025-12-30 ## Categories & Tags **Categories**: harmonyos-drivers **Tags**: None ## README # OH-DADF #### OpenHarmony-Distributed Application Devlopment Framework **基于OpenHarmonyOS自主研发一个开源的跨设备应用开发框架,实现多种分布式业务的快速开发。本框架基于OpenHarmony SDK和JDK实现,采用多层封装的模式服务不同水平的开发者,达到简化开发的目标。** 由于个人的力量是有限的,欢迎大家提出意见和建议,共同开发。 #### 项目介绍 - 项目名称:分布式应用开发框架 - 所属系列:OpenHarmony第三方组件 - 功能:简化分布式应用开发 - 开发版本:sdk5,DevEco Studio2.1 Release - 项目发起作者:吴圣垚 - 邮箱:isrc_hm@iscas.ac.cn - 编程语言:Java ![输入图片说明](https://images.gitee.com/uploads/images/2021/0618/170657_8d89d541_1809168.png "图片1.png") #### 安装教程 1. 下载OH-DADF的har包OH-DADF.har 2. 启动 DevEco Studio,将下载的har包,导入工程目录“entry->libs”下。 3. 在moudle级别下的build.gradle文件中添加依赖,在dependences标签中增加对libs目录下jar包的引用,然后执行gradle sync。 ``` dependencies { implementation fileTree(dir: 'libs', include: ['*.jar', '*.har']) …… } ``` 4. 如仍无法识别har包,可以尝试在har包上点击右键,选择“Add as Library”对包进行引用,选择需要引用的模块,并点击“OK”即引用成功。 #### 使用说明 1. 分布式场景一:分布式任务启动/停止 1.1 控件层封装StartAbilityContainer 提供了高度封装的StartAbilityContainer,使用者只需在其UI中植入StartAbilityContainer实例即可实现设备发现、分布式任务启动、停止等功能。 例如,直接将StartAbilityContainer作为根UI,短短几行,十分方便: ``` //权限 requestPermissionsFromUser(Permissons.getBasePermissons(),0); //调用控件 StartAbilityContainer startAbilityContainer = new StartAbilityContainer(this); super.setUIContent(startAbilityContainer); ``` 大致效果如下: ![输入图片说明](https://images.gitee.com/uploads/images/2021/0618/170713_e7d19d05_1809168.png "图片2.png") ​ 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); ``` 大致效果如下: ![输入图片说明](https://images.gitee.com/uploads/images/2021/0618/170721_5168fa87_1809168.png "图片3 (2).png") 首先点击连接,成功后就可以点击执行按钮来开始执行自己的业务逻辑了,完成后点击断开。 ​ 2.3 函数层封装ConnectManager ​ 相比Component级封装程度较低,但更灵活自由,使用者可以自由选择。 3.分布式场景三:分布式应用程序迁移 分布式应用程序迁移部分与OpenHarmonyOS提供的能力相差不大,都是使用AbilitySlice继承IAbilityContinuation来完成的,感兴趣可以参考官方文档。后续打算推出基于AbilitySlice的各种业务模板,简化开发。 这边提供了一个简单的分布式记事本demo,大致效果如下: ![输入图片说明](https://images.gitee.com/uploads/images/2021/0618/170730_0759cc1a_1809168.png "图片4.png") 当输入一些文字后,点击保存然后点击迁移,这个应用会在迁移到另一个设备上(如果有多个设备满足启动条件,会弹出选择框),输入的文字信息保持不变。 #### 版本迭代 - v0.1.0-alpha 目前还很初级,以下是大致的完成情况。 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0618/170740_62339c8e_1809168.png "图片5.png") #### 版权和许可信息 - OH-DADF经过[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0)授权许可。