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

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. 如仍无法识别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 函数层封装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-master.zip 6.2M 9次下载
已于2021-11-26 18:24:21修改
收藏
回复
举报
回复
    相关推荐