鸿蒙开源组件——跨设备应用开发框架

jacksky
发布于 2021-11-26 18:24
浏览
0收藏

OH-DADF

OpenHarmony-Distributed Application Devlopment Framework

基于OpenHarmonyOS自主研发一个开源的跨设备应用开发框架,实现多种分布式业务的快速开发。本框架基于OpenHarmony SDK和JDK实现,采用多层封装的模式服务不同水平的开发者,达到简化开发的目标。

由于个人的力量是有限的,欢迎大家提出意见和建议,共同开发。

项目介绍

  • 项目名称:分布式应用开发框架

  • 所属系列:OpenHarmony第三方组件

  • 功能:简化分布式应用开发

  • 开发版本:sdk5,DevEco Studio2.1 Release

  • 项目作者和维护人:吴圣垚

  • 邮箱:isrc_hm@iscas.ac.cn

  • 编程语言:Java鸿蒙开源组件——跨设备应用开发框架-鸿蒙开发者社区

  • 安装教程

    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'])
	……
}
  • 1.
  • 2.
  • 3.
  • 4.
  1. 如仍无法识别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);
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

大致效果如下:鸿蒙开源组件——跨设备应用开发框架-鸿蒙开发者社区

​ 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);
    };    
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.

​ 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);
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

大致效果如下:

鸿蒙开源组件——跨设备应用开发框架-鸿蒙开发者社区

首先点击连接,成功后就可以点击执行按钮来开始执行自己的业务逻辑了,完成后点击断开。

​ 2.3 函数层封装ConnectManager

​ 相比Component级封装程度较低,但更灵活自由,使用者可以自由选择。

3.分布式场景三:分布式应用程序迁移

分布式应用程序迁移部分与OpenHarmonyOS提供的能力相差不大,都是使用AbilitySlice继承IAbilityContinuation来完成的,感兴趣可以参考官方文档。后续打算推出基于AbilitySlice的各种业务模板,简化开发。

 

这边提供了一个简单的分布式记事本demo,大致效果如下:

鸿蒙开源组件——跨设备应用开发框架-鸿蒙开发者社区

 

 

当输入一些文字后,点击保存然后点击迁移,这个应用会在迁移到另一个设备上(如果有多个设备满足启动条件,会弹出选择框),输入的文字信息保持不变。

版本迭代

  • v0.1.0-alpha 目前还很初级,以下是大致的完成情况。鸿蒙开源组件——跨设备应用开发框架-鸿蒙开发者社区

版权和许可信息

oh-dadf-master.zip 6.2M 9次下载
已于2021-11-26 18:24:21修改
收藏
回复
举报
回复
    相关推荐