首页> 中国专利> 使用二进制程序进行功能固化并提供服务的方法及系统

使用二进制程序进行功能固化并提供服务的方法及系统

摘要

本发明公开使用二进制程序进行功能固化并提供服务的方法及系统。本发明利用跨平台的通用通信传输方法进行针对性的改造,使整个系统框架拥有极高的性能,同时实现二进制程序与二进制程序之间、二进制程序与外部程序之间实现高性能API通信接口封装的方法,进而满足业务稳定性和技术扩展性的要求。极大的减轻开发人员的负担,提升软件开发效率,使整个系统拥有极高的性能,提升系统的体验,更好的满足智能时代下对于软件系统的灵活性和性能指标的需求。

著录项

  • 公开/公告号CN105204848A

    专利类型发明专利

  • 公开/公告日2015-12-30

    原文格式PDF

  • 申请/专利权人 深圳创维-RGB电子有限公司;

    申请/专利号CN201510534679.7

  • 发明设计人 江平;吕伟龙;

    申请日2015-08-27

  • 分类号G06F9/44(20060101);G06F9/54(20060101);

  • 代理机构44268 深圳市君胜知识产权代理事务所;

  • 代理人王永文;刘文求

  • 地址 518052 广东省深圳市南山区深南大道创维大厦A座13-16楼

  • 入库时间 2023-12-18 13:14:03

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-08-14

    授权

    授权

  • 2016-01-27

    实质审查的生效 IPC(主分类):G06F9/44 申请日:20150827

    实质审查的生效

  • 2015-12-30

    公开

    公开

说明书

技术领域

本发明涉及消费性电子产品技术领域,尤其涉及一种使用二进制程序进行功能固化并提供服务的方法及系统。

背景技术

目前,智能电视等智能设备的技术发展越来越快,从嵌入式Linux到智能Android再到基于浏览器引擎的WebOS,对于软件开发者而言,往往需要在各种不同的系统中进行相同软件功能的重复开发,在技术不断革新,功能不断迭代的今天,这样重复开发的劳动已经无法满足企业对于软件开发效率提升的需求。现有技术中,系统功能服务大部分是实现一层中间件来实现跨不同芯片架构的软件接口,但是架构的灵活性、扩展性不高,并没有提出一套系统级的、稳健的模型框架解决智能电视等设备越来越苛刻的对系统性能、系统扩展、平台兼容等方面的需求。即现有的系统框架导致软件开发效率低、开发人员负担大。

因此,现有技术还有待于改进和发展。

发明内容

鉴于上述现有技术的不足,本发明的目的在于提供一种使用二进制程序进行功能固化并提供服务的方法及系统,旨在解决现有系统框架灵活性、扩展性不高,软件开发效率低的问题。

本发明的技术方案如下:

一种使用二进制程序进行功能固化、与虚拟机实现软件解耦的方法,其中,包括步骤:

对系统功能进行固化,形成具有公共接口的系统二进制程序;

不同二进制程序之间使用私有通信协议进行数据通信;

上层Android应用或上层WEBHTML5应用使用解耦接口动态调用二进制程序提供的系统服务。

所述的使用二进制程序进行功能固化、与虚拟机实现软件解耦的方法,其中,所述系统功能包括:UI引擎、系统传屏协议、虚拟设备操作及服务器长连接。

所述的使用二进制程序进行功能固化、与虚拟机实现软件解耦的方法,其中,不同二进制程序之间使用私有通信协议进行数据通信的过程包括:

当一个作为源进程的二进制程序需要使用另一个作为目标进程的二进制程序的服务时,源进程首先对要进行的调用进行数据封装;

封装好通信数据后,通过本机的私有通信协议进行传输;

目标进程接收到通信数据后,对接收到的通信数据进行解析,执行相应的请求,并根据是否需要回执,对执行的结果进行处理。

所述的使用二进制程序进行功能固化、与虚拟机实现软件解耦的方法,其中,二进制程序之间进行数据通信的过程还包括:

在进行数据封装时自动调整通信数据顺序,使在内存分配生成数据时占用最小的内存空间;

对顺序调整后的通信数据进行初始化时,使用内存中的二进制存储数据,将所有顺序调整后的通信数据拼接构造为一个二进制缓存,并存储于内存中,并循环的添加通信数据,得到一个二进制缓存流,在数据传输过程中直接传输所述二进制缓存流;

将接收到的二进制缓存流存储在系统的缓存或者内存中;

读取二进制缓存流时,获得二进制缓存流的根对象指针,直接读取内存映射地址获取所需要的字段的内容。

所述的使用二进制程序进行功能固化、与虚拟机实现软件解耦的方法,其中,本机的私有通信协议使用Domain套接字方式:

使用AF_LOCAL来申请一个本地套接字,所述本地套接字同时支持以字节流的形式传输的字节流套接口和以数据报的形式传输的数据报套接口。

所述的使用二进制程序进行功能固化、与虚拟机实现软件解耦的方法,其中,上层Android应用使用解耦接口动态调用二进制程序提供的系统服务的过程包括:

上层Android应用通过JNI的方式调用到下层的JNI库的方法;

当JNI库方获取调用情况后,调用对应需要使用的解耦接口,在解耦接口中根据当前系统传输下来的上下文获取上层Android应用的通信数据;

封装好通信数据后,使用二进制程序的公共接口进行通信,此时上层Android应用与二进制程序自动连接配对;

二进制程序接收到通信数据后,进行解析并根据解析结果,进行二进制程序的调用,执行相应的请求,并根据是否需要回执,对执行的结果进行处理。

所述的使用二进制程序进行功能固化、与虚拟机实现软件解耦的方法,其中,上层WEBHTML5应用使用解耦接口动态调用二进制程序提供的系统服务的过程包括:

对上层WEBHTML5应用进行本地JS扩展;

通过JS的动态绑定方式调用对应需要使用的解耦接口,在解耦接口中根据当前系统传输下来的上下文获取上层WEBHTML5应用的通信数据;

封装好通信数据后,使用二进制程序的公共接口进行通信,此时上层WEBHTML5应用与二进制程序自动连接配对;

二进制程序接收到通信数据后,进行解析并根据解析结果,进行二进制程序的调用,执行相应的请求,并根据是否需要回执,对执行的结果进行处理。

一种使用二进制程序进行功能固化、与虚拟机实现软件解耦的系统,其中,包括:

固化模块,用于对系统功能进行固化,形成具有公共接口的系统二进制程序;

通信模块,用于不同二进制程序之间使用私有通信协议进行数据通信;

调用模块,用于上层Android应用或上层WEBHTML5应用使用解耦接口动态调用二进制程序提供的系统服务。

所述的使用二进制程序进行功能固化、与虚拟机实现软件解耦的系统,其中,所述系统功能包括:UI引擎、系统传屏协议、虚拟设备操作及服务器长连接。

所述的使用二进制程序进行功能固化、与虚拟机实现软件解耦的系统,其中,通信模块具体包括:

封装单元,用于当一个作为源进程的二进制程序需要使用另一个作为目标进程的二进制程序的服务时,源进程首先对要进行的调用进行数据封装;

传输单元,用于封装好通信数据后,通过本机的私有通信协议进行传输;

解析单元,用于接收到通信数据后,对接收到的通信数据进行解析,执行相应的请求,并根据是否需要回执,对执行的结果进行处理。

有益效果:本发明利用跨平台的通用通信传输方法进行针对性的改造,使整个系统框架拥有极高的性能,同时实现二进制程序与二进制程序之间、二进制程序与外部程序之间实现高性能API通信接口封装的方法,进而满足业务稳定性和技术扩展性的要求。极大的减轻开发人员的负担,提升软件开发效率,使整个系统拥有极高的性能,提升系统的体验,更好的满足智能时代下对于软件系统的灵活性和性能指标的需求。

附图说明

图1为本发明一种使用二进制程序进行功能固化并提供服务的方法较佳实施例的流程图;

图2为图1所示方法中步骤S102的具体流程图;

图3为图1所示方法中步骤S102的又一流程图;

图4为图1所示方法中步骤S103的具体流程图;

图5为图1所示方法中步骤S103的又一流程图。

具体实施方式

本发明提供一种使用二进制程序进行功能固化并提供服务的方法及系统,为使本发明的目的、技术方案及效果更加清楚、明确,以下对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

请参阅图1,图1为本发明一种使用二进制程序进行功能固化、与虚拟机实现软件解耦的方法,其包括步骤:

S101、对系统功能进行固化,形成具有公共接口的系统二进制程序;

S102、不同二进制程序之间使用私有通信协议进行数据通信;

S103、上层Android应用或上层WEBHTML5应用使用解耦接口动态调用二进制程序提供的系统服务。

本发明中,通过对系统功能进行固化,形成系统二进制程序的服务,这些服务(二进制程序)整合后统一对外公共接口,外部程序通过公共接口调用各个服务的功能,不同二进制程序之间在进行数据通信的时候,使用自定义的私有通信协议,该私有通信协议可提供二进制程序之间在本机上进行进程间高效、稳健通信的私有协议,确保在本机上的高效、稳健的通信;同时对于不同运行环境的上层应用,使用解耦接口动态调用二进制程序提供的系统服务,这套解耦接口可兼容不同的上层应用运行环境,通过不同的方式动态调用接口。二进制程序的系统服务,是指用于对系统(本实施例以智能电视系统为例进行说明)上的非硬件的、系统必备的、新增的系统功能进行二进制程序的实现,并对外提供服务。

所述系统功能包括:UI引擎、系统传屏协议、虚拟设备操作及服务器长连接。

其中的UI引擎,用于向系统提供脱离于Android框架的UI显示引擎服务;

系统传屏协议,在私有传屏协议之上,用于向手机、pc等设备提供的用于控制智能电视的服务;

虚拟设备操作,用于提供智能电视上键盘、鼠标、遥控器等设备的操作服务;

服务器长连接,用于提供向智能电视远程推送消息、视频的服务。

对于上面这些系统功能,其区别于电视信号解析、屏幕控制等需要与硬件直接相关的功能,对于当前智能电视来说,其属于必须的但是Android系统并没有提供的、或者没有进行改进的功能,其固化方法:就是将这些功能使用C++语言实现在Android系统的Native层,以二进制程序的形式呈现,并向外提供服务。比如对于系统传屏协议,可使用C++语言实现传屏协议功能,然后编译成二进制程序,然后在Android的Native层运行,直接对外提供传屏服务支持。

以下结合具体实施例对本发明的具体实现进行详细描述,

在本发明中,通过对系统功能的固化为系统服务,并以二进制程序的形式体现,这些二进制服务有别于普通的二进制程序,本发明的二进制程序独立于Android、WEB引擎等上层平台,并不需要依赖上层平台,只需要依赖于Linux系统内核,而且各个二进制程序之间是相互独立的,只在有业务需求时,通过公共接口来调用对应二进制程序的服务,二进制程序之间的数据传递使用自定义的私有通信协议。

该私有通信协议的数据结构定义如下:

{uuid:string;

to:string;

from:string;

cmd:string;

needAck:uint;

bodysize:uint;

keys:[string];

}

该私有通信协议的数据结构中各部分名词解释如下:

uuid:本条数据传输的唯一性保障字段,保证每条数据唯一性;

to:本条数据传输的目标进程标识;

from:本条数据传输的源进程标识;

cmd:本条数据传输代表的动作含义;

needAck:本条数据传输是否需要目标进程回复;

bodysize:传输数据中的额外携带数据大小;

keys:传输数据中的额外携带数据。

如图2所示,不同二进制程序之间使用私有通信协议进行数据通信的过程包括:

S201、当一个作为源进程的二进制程序(称为二进制程序A)需要使用另一个作为目标进程的二进制程序(称为二进制程序B)的服务时,二进制程序A首先对要进行的调用进行数据封装,封装的数据包括本次调用的源进程(from),需要调用的目标进程(to),调用的使用的功能命令(cmd),是否需要回执(needAck),数据是否需要额外传输数据,若需要,则需要表明数据大小(bodysizes)及携带的数据(keys)。

S202、封装好通信数据后,通过本机的私有通信协议进行数据传输;

具体是通过本机的私有通信协议封装的接口进行传输。

S203、二进制程序B接收到通信数据后,对接收到的通信数据进行解析,执行相应的请求,并根据是否需要回执,对执行的结果进行处理。

二进制程序B接收到通信数据后,获知调用请求,对接收到的通信数据进行解析(cmd),二进制程序B调用相关功能或提供相关数据,并根据是否需要回执(needAck),对执行的结果进行处理,如果不需要回执,则二进制程序B继续监听下一个二进制程序请求的到来;如果需要回执,则二进制程序B封装好要回执的数据,再通过本机的私有通信协议接口反馈给二进制程序A,二进制程序A获得返回的数据,进行下一步的操作,同时二进制程序B监听下一个二进制程序的请求。

另外,为了确保传输数据的过程的高效,二进制程序之间进行数据通信的过程还进行了优化,如图3所示,其具体包括:

S301、在进行数据封装时自动调整通信数据顺序,使在内存分配生成数据时占用最小的内存空间;

对于封装的数据结构中的通信数据顺序,在程序编译的时候,通过生成器自动调整为最佳顺序,以保证在内存分配生成数据时占用最小的内存空间;

S302、对于顺序调整后的通信数据进行初始化时,使用内存中的二进制存储数据,将所有顺序调整后的通信数据拼接构造为一个二进制缓存,并存储于内存中,并循环的添加通信数据,得到一个二进制缓存流,在数据传输过程中直接传输所述二进制缓存流;

在数据传输过程中直接传输这个二进制缓存(buffer)流,无需像JSON、PUGIXML等方式进行复杂的序列化操作,而且对数据的解码、遍历、内存分配能够达到百万次操作达到1million/0.08s,远远高于JSON数据的1million/583s和PUGIXML数据的1million/196s,使数据序列化性能得到极大提升;

S303、将接收的二进制缓存流存储在系统的缓存或者内存中;

由于采用的是本机进程间的数据传输,二进制缓存流在传输中不需要通信协议栈的封装,直接传输即可,接收的二进制缓存流存储在系统的缓存或者内存中,也无需进行再次的内存分配,不会花费额外内存开销,同时也不需要进行类似于JSON、PUGIXML等方式的反序列化操作。

S304、读取二进制缓存流时,获得二进制缓存流的根对象指针,直接读取内存映射地址获取所需要的字段的内容。

在读取二进制缓存流时,直接获得该二进制缓存流的根对象指针,读取内存映射地址获取所需要的字段的内容,所以在解析数据上没有任何的开销,而且不需要CPU开销的直接访问数据,大大减少了系统CPU需要对数据反序列化带来的消耗,提升数据的访问效率和速度。

在当前的智能电视等设备当中,本机的进程间通信(IPC)主要使用管道(pipe)、有名管道(namedpipe)、信号量(semophore)、消息队列(messagequeue)、信号(signal)、共享内存(sharedmemeory)、套接字(socket)等方式,但以上这些方式都无法兼顾到本地进程间通信的高效和灵活性。本发明则采用Linux内核中已经包含的本机进程通信方法:DomainSocket(套接字),这种通信方法不仅符合通用的Socket标准,而且在系统内核实现方面,不需要经过协议栈的转化,而是直接使用类似于namedpipe的底层实现。本发明对DomianSocket的使用进行进一步的封装,使得接口通信不仅兼具系统级API调用的效率,并且兼顾了Socket的数据灵活性。

使用AF_LOCAL来申请一个本地套接字,所述本地套接字同时支持以字节流的形式传输的字节流套接口和以数据报的形式传输的数据报套接口。

系统接口在创建Socket时,使用AF_LOCAL来申请一个本地套接字,并且同时支持字节流套接口(SOCK_STREAM类似TCP)和数据报套接口(SOCK_DGRAM类似UDP)两种传输方式,使接口兼具灵活性和可靠性。如:Socket::socket(AF_LOCAL,isStream?SOCK_STREAM:SOCK_DGRAM,0);字节流套接口类似于TCP协议,数据以字节流的形式传输,确保数据在接收端和发送端数据顺序一致和数据的无误。数据报套接口:数据以数据报的形式传输,类似于UDP协议,但有别于UDP协议数据传输过程中出现数据报丢失,数据报到达时间的无序,数据报的大小限制等问题,SOCK_DGRAM的消息传输是可靠的、有序的,确保数据不会丢失、数据报的数据接受是有序的、没有数据报传输的的大小限制。

下面分别对上层Android应用及上层WEBHTML5应用与二进制程序的调用过程进行说明。其中,上层Android应用与上层WEBHTML5应用二者之间是并列的关系。上层Android应用就是目前Android系统的应用软件,如Android原生的拍照,计算器,QQ等;上层WEBHTML5应用:是指基于HTML5标准之上,开发的在WEB浏览器上运行的程序,如百度google等提供的服务,微信的界面就是一个典型的HTML5应用。

如图4所示,上层Android应用与二进制程序的互相调用过程包括:

S401、上层Android应用通过JNI的方式调用到下层的JNI库的方法;

S402、当JNI库方获取调用情况后,调用对应需要使用的解耦接口,在解耦接口中根据当前系统传输下来的上下文获取上层Android应用的通信数据;

S403、封装好通信数据后,使用二进制程序的公共接口进行通信,此时上层Android应用与二进制程序自动连接配对;

S404、二进制程序接收到通信数据后,进行解析并根据解析结果,进行二进制程序的调用,执行相应的请求,并根据是否需要回执,对执行的结果进行处理。

对于整体系统架构中,当系统上层的Android应用,需要调用系统中的二进制程序服务时,就要使用到适配层中的一套解耦接口,通过解耦接口,上层Android应用才能够调用二进制服务的功能。

具体来说,上层Android应用通过JNI的方式调用到下层的JNI库的方法,当JNI库方获取调用情况后,调用对应需要使用的解耦接口,在解耦接口中根据当前系统传输下来的上下文获取当前上层应用是运行在JAVA虚拟机上的JAVA程序,同时获取到上层Android应用的通信数据,通过自定义的私有通信协议,封装通信数据,例如上层Android应用的名称和接口请求,从哪个目标调用程序调用哪个二进制程序,调用使用的什么要求的命令(cmd),是否需要被调用的二进制程序做出回执(needAck),封装好通信数据后,使用二进制程序的公共接口进行通信,此时上层Android应用与二进制程序自动连接配对,二进制程序接收到通信数据后,解析通信数据,根据解析结果,进行二进制程序的调用,调用完成后,根据是否需要对目标调用程序进行进行回执(needAck),如果不需要回执,则执行完结束;如果需要回执,则封装反馈结果根据适配层的接口调用返回,适配层的接口根据上下文,把封装的反馈结果依据JNI的方式返回给上层JAVA虚拟机,上层Android应用获得反馈结果进行上层操作;底层服务与上层的通信结束后,对本次通信自动解耦,确保线程安全,下次上层虚拟机需要继续调用服务,需要进行重新的接口调用操作。

如图5所示,上层WEBHTML5应用使用解耦接口动态调用二进制程序提供的系统服务的过程包括:

S501、对上层WEBHTML5应用进行本地JS扩展;

S502、通过JS的动态绑定方式调用对应需要使用的解耦接口,在解耦接口中根据当前系统传输下来的上下文获取上层WEBHTML5应用的通信数据;

S503、封装好通信数据后,使用二进制程序的公共接口进行通信,此时上层WEBHTML5应用与二进制程序自动连接配对;

S504、二进制程序接收到通信数据后,进行解析并根据解析结果,进行二进制程序的调用,执行相应的请求,并根据是否需要回执,对执行的结果进行处理。

对于WEB引擎的HTML5应用程序,需要调用二进制程序的服务时,对上层WEBHTML5应用进行本地JS扩展,WebCore与JavaScriptCore之间使用了V8Proxy模式,WebCore为JavaScriptCore提供了一层Binding(绑定)层做为封装,使用JS的动态绑定方式实现与C++层程序进行绑定,通过JS绑定方式调用对应需要使用的解耦接口,在解耦接口中根据当前系统传输下来的上下文获取当前上层应用是运行在WEB引擎上的HTML5程序,同时获取到上层WEBHTML5应用的通信数据,通过自定义的私有通信协议,封装通信数据,包括上层WEBHTML5应用的名称和接口请求,从哪个目标调用程序调用哪个二进制程序,调用使用的什么要求的命令(cmd),是否需要被调用的二进制程序做出回执(needAck),封装好通信数据后,使用二进制程序的公共接口进行通信,此时上层WEBHTML5应用与二进制程序自动连接配对,二进制程序接收到通信数据后,解析通信数据,根据解析结果,进行二进制程序的调用,根据是否需要对目标调用程序进行进行回执(needAck),如果不需要回执,则执行完结束;如果需要回执,则封装反馈结果根据适配层的接口调用返回,适配层的接口根据上下文,把封装的反馈结果通过JS的动态绑定方式返回给上层WEBHTML5应用,上层WEBHTML5应用获得反馈结果后进行上层操作;底层服务与上层的通信结束后,对本次通信自动解耦,确保线程安全,下次上层虚拟机需要继续调用服务,需要进行重新的解耦操作。

现有技术中,系统功能是通过屏蔽系统芯片硬件架构或系统通用功能的差异化,对上层应用提供统一的接口,只是对系统的功能进行了统一的接口封装,而本发明中,是过对非芯片硬件架构的相关通用软件功能进行模块化,这些模块在系统本身是没有的,而是进行了功能扩展,并以二进制程序的形式提供系统级的服务并构成服务框架,定义一套标准化的公用接口,并通过运用于系统级框架的高效、稳健的私有通信协议框架,兼容不同上层环境应用程序的解耦接口,本发明既包含了中间件方法的优点却又不局限于这些优点,而且比中间件具有更好的扩展性能,对于系统没有的功能都可以有效扩展,能够解决中间件在智能电视等设备上无法解决的问题,如:智能电视对系统性能、交互体验、系统扩展、平台兼容性、技术积累等方面的越来越严苛的需求,如本发明涉及到的一系列的系统本身没有的服务:UI引擎服务、系统传屏协议服务、服务器长链接服务、虚拟设备操作服务。本发明能够显著的提升智能设备的使用体验和性能,降低对硬件的苛刻要求,同时显著提升开发人员的开发效率,而且接口机制设计上非常灵活,有非常方便的扩展性,能够方便、快捷的添加智能设备新的需求。

基于上述方法,一种使用二进制程序进行功能固化、与虚拟机实现软件解耦的系统,其包括:

固化模块,用于对系统功能进行固化,形成具有公共接口的系统二进制程序;

通信模块,用于不同二进制程序之间使用私有通信协议进行数据通信;

调用模块,用于上层Android应用或上层WEBHTML5应用使用解耦接口动态调用二进制程序提供的系统服务。

进一步,所述系统功能包括:UI引擎、系统传屏协议、虚拟设备操作及服务器长连接。

进一步,通信模块具体包括:

封装单元,用于当一个作为源进程的二进制程序需要使用另一个作为目标进程的二进制程序的服务时,源进程首先对要进行的调用进行数据封装;

传输单元,用于封装好通信数据后,通过本机的私有通信协议进行传输;

解析单元,用于接收到通信数据后,对接收到的通信数据进行解析,执行相应的请求,并根据是否需要回执,对执行的结果进行处理。

关于上述模块单元的技术细节在前面的方法中已有详述,故不再赘述。

应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号