CN105204848B - 使用二进制程序进行功能固化并提供服务的方法及*** - Google Patents
使用二进制程序进行功能固化并提供服务的方法及*** Download PDFInfo
- Publication number
- CN105204848B CN105204848B CN201510534679.7A CN201510534679A CN105204848B CN 105204848 B CN105204848 B CN 105204848B CN 201510534679 A CN201510534679 A CN 201510534679A CN 105204848 B CN105204848 B CN 105204848B
- Authority
- CN
- China
- Prior art keywords
- binary program
- binary
- upper layer
- data
- decoupling
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Information Transfer Between Computers (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明公开使用二进制程序进行功能固化并提供服务的方法及***。本发明利用跨平台的通用通信传输方法进行针对性的改造,使整个***框架拥有极高的性能,同时实现二进制程序与二进制程序之间、二进制程序与外部程序之间实现高性能API通信接口封装的方法,进而满足业务稳定性和技术扩展性的要求。极大的减轻开发人员的负担,提升软件开发效率,使整个***拥有极高的性能,提升***的体验,更好的满足智能时代下对于软件***的灵活性和性能指标的需求。
Description
技术领域
本发明涉及消费性电子产品技术领域,尤其涉及一种使用二进制程序进行功能固化并提供服务的方法及***。
背景技术
目前,智能电视等智能设备的技术发展越来越快,从嵌入式Linux到智能Android再到基于浏览器引擎的WebOS,对于软件开发者而言,往往需要在各种不同的***中进行相同软件功能的重复开发,在技术不断革新,功能不断迭代的今天,这样重复开发的劳动已经无法满足企业对于软件开发效率提升的需求。现有技术中,***功能服务大部分是实现一层中间件来实现跨不同芯片架构的软件接口,但是架构的灵活性、扩展性不高,并没有提出一套***级的、稳健的模型框架解决智能电视等设备越来越苛刻的对***性能、***扩展、平台兼容等方面的需求。即现有的***框架导致软件开发效率低、开发人员负担大。
因此,现有技术还有待于改进和发展。
发明内容
鉴于上述现有技术的不足,本发明的目的在于提供一种使用二进制程序进行功能固化并提供服务的方法及***,旨在解决现有***框架灵活性、扩展性不高,软件开发效率低的问题。
本发明的技术方案如下:
一种使用二进制程序进行功能固化、与虚拟机实现软件解耦的方法,其中,包括步骤:
对***功能进行固化,形成具有公共接口的***二进制程序;
不同二进制程序之间使用私有通信协议进行数据通信;
上层Android应用或上层WEB HTML5应用使用解耦接口动态调用二进制程序提供的***服务。
所述的使用二进制程序进行功能固化、与虚拟机实现软件解耦的方法,其中,所述***功能包括:UI引擎、***传屏协议、虚拟设备操作及服务器长连接。
所述的使用二进制程序进行功能固化、与虚拟机实现软件解耦的方法,其中,不同二进制程序之间使用私有通信协议进行数据通信的过程包括:
当一个作为源进程的二进制程序需要使用另一个作为目标进程的二进制程序的服务时,源进程首先对要进行的调用进行数据封装;
封装好通信数据后,通过本机的私有通信协议进行传输;
目标进程接收到通信数据后,对接收到的通信数据进行解析,执行相应的请求,并根据是否需要回执,对执行的结果进行处理。
所述的使用二进制程序进行功能固化、与虚拟机实现软件解耦的方法,其中,二进制程序之间进行数据通信的过程还包括:
在进行数据封装时自动调整通信数据顺序,使在内存分配生成数据时占用最小的内存空间;
对顺序调整后的通信数据进行初始化时,使用内存中的二进制存储数据,将所有顺序调整后的通信数据拼接构造为一个二进制缓存,并存储于内存中,并循环的添加通信数据,得到一个二进制缓存流,在数据传输过程中直接传输所述二进制缓存流;
将接收到的二进制缓存流存储在***的缓存或者内存中;
读取二进制缓存流时,获得二进制缓存流的根对象指针,直接读取内存映射地址获取所需要的字段的内容。
所述的使用二进制程序进行功能固化、与虚拟机实现软件解耦的方法,其中,本机的私有通信协议使用Domain 套接字方式:
使用AF_LOCAL来申请一个本地套接字,所述本地套接字同时支持以字节流的形式传输的字节流套接口和以数据报的形式传输的数据报套接口。
所述的使用二进制程序进行功能固化、与虚拟机实现软件解耦的方法,其中,上层Android应用使用解耦接口动态调用二进制程序提供的***服务的过程包括:
上层Android应用通过JNI的方式调用到下层的JNI库的方法;
当JNI库方获取调用情况后,调用对应需要使用的解耦接口,在解耦接口中根据当前***传输下来的上下文获取上层Android应用的通信数据;
封装好通信数据后,使用二进制程序的公共接口进行通信,此时上层Android应用与二进制程序自动连接配对;
二进制程序接收到通信数据后,进行解析并根据解析结果,进行二进制程序的调用,执行相应的请求,并根据是否需要回执,对执行的结果进行处理。
所述的使用二进制程序进行功能固化、与虚拟机实现软件解耦的方法,其中,上层WEB HTML5应用使用解耦接口动态调用二进制程序提供的***服务的过程包括:
对上层WEB HTML5应用进行本地JS扩展;
通过JS的动态绑定方式调用对应需要使用的解耦接口,在解耦接口中根据当前***传输下来的上下文获取上层WEB HTML5应用的通信数据;
封装好通信数据后,使用二进制程序的公共接口进行通信,此时上层WEB HTML5应用与二进制程序自动连接配对;
二进制程序接收到通信数据后,进行解析并根据解析结果,进行二进制程序的调用,执行相应的请求,并根据是否需要回执,对执行的结果进行处理。
一种使用二进制程序进行功能固化、与虚拟机实现软件解耦的***,其中,包括:
固化模块,用于对***功能进行固化,形成具有公共接口的***二进制程序;
通信模块,用于不同二进制程序之间使用私有通信协议进行数据通信;
调用模块,用于上层Android应用或上层WEB HTML5应用使用解耦接口动态调用二进制程序提供的***服务。
所述的使用二进制程序进行功能固化、与虚拟机实现软件解耦的***,其中,所述***功能包括:UI引擎、***传屏协议、虚拟设备操作及服务器长连接。
所述的使用二进制程序进行功能固化、与虚拟机实现软件解耦的***,其中,通信模块具体包括:
封装单元,用于当一个作为源进程的二进制程序需要使用另一个作为目标进程的二进制程序的服务时,源进程首先对要进行的调用进行数据封装;
传输单元,用于封装好通信数据后,通过本机的私有通信协议进行传输;
解析单元,用于接收到通信数据后,对接收到的通信数据进行解析,执行相应的请求,并根据是否需要回执,对执行的结果进行处理。
有益效果:本发明利用跨平台的通用通信传输方法进行针对性的改造,使整个***框架拥有极高的性能,同时实现二进制程序与二进制程序之间、二进制程序与外部程序之间实现高性能API通信接口封装的方法,进而满足业务稳定性和技术扩展性的要求。极大的减轻开发人员的负担,提升软件开发效率,使整个***拥有极高的性能,提升***的体验,更好的满足智能时代下对于软件***的灵活性和性能指标的需求。
附图说明
图1为本发明一种使用二进制程序进行功能固化并提供服务的方法较佳实施例的流程图;
图2为图1所示方法中步骤S102的具体流程图;
图3为图1所示方法中步骤S102的又一流程图;
图4为图1所示方法中步骤S103的具体流程图;
图5为图1所示方法中步骤S103的又一流程图。
具体实施方式
本发明提供一种使用二进制程序进行功能固化并提供服务的方法及***,为使本发明的目的、技术方案及效果更加清楚、明确,以下对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
请参阅图1,图1为本发明一种使用二进制程序进行功能固化、与虚拟机实现软件解耦的方法,其包括步骤:
S101、对***功能进行固化,形成具有公共接口的***二进制程序;
S102、不同二进制程序之间使用私有通信协议进行数据通信;
S103、上层Android应用或上层WEB HTML5应用使用解耦接口动态调用二进制程序提供的***服务。
本发明中,通过对***功能进行固化,形成***二进制程序的服务,这些服务(二进制程序)整合后统一对外公共接口,外部程序通过公共接口调用各个服务的功能,不同二进制程序之间在进行数据通信的时候,使用自定义的私有通信协议,该私有通信协议可提供二进制程序之间在本机上进行进程间高效、稳健通信的私有协议,确保在本机上的高效、稳健的通信;同时对于不同运行环境的上层应用,使用解耦接口动态调用二进制程序提供的***服务,这套解耦接口可兼容不同的上层应用运行环境,通过不同的方式动态调用接口。二进制程序的***服务,是指用于对***(本实施例以智能电视***为例进行说明)上的非硬件的、***必备的、新增的***功能进行二进制程序的实现,并对外提供服务。
所述***功能包括: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等方式进行复杂的序列化操作,而且对数据的解码、遍历、内存分配能够达到百万次操作达到1 million/0.08s,远远高于JSON数据的1 million/583s和PUGIXML数据的1 million/196s,使数据序列化性能得到极大提升;
S303、将接收的二进制缓存流存储在***的缓存或者内存中;
由于采用的是本机进程间的数据传输,二进制缓存流在传输中不需要通信协议栈的封装,直接传输即可,接收的二进制缓存流存储在***的缓存或者内存中,也无需进行再次的内存分配,不会花费额外内存开销,同时也不需要进行类似于JSON、PUGIXML等方式的反序列化操作。
S304、读取二进制缓存流时,获得二进制缓存流的根对象指针,直接读取内存映射地址获取所需要的字段的内容。
在读取二进制缓存流时,直接获得该二进制缓存流的根对象指针,读取内存映射地址获取所需要的字段的内容,所以在解析数据上没有任何的开销,而且不需要CPU开销的直接访问数据,大大减少了***CPU需要对数据反序列化带来的消耗,提升数据的访问效率和速度。
在当前的智能电视等设备当中,本机的进程间通信(IPC)主要使用管道(pipe)、有名管道(named pipe)、信号量(semophore)、消息队列(message queue)、信号(signal)、共享内存(shared memeory)、套接字(socket)等方式,但以上这些方式都无法兼顾到本地进程间通信的高效和灵活性。本发明则采用Linux内核中已经包含的本机进程通信方法:Domain Socket(套接字),这种通信方法不仅符合通用的Socket标准,而且在***内核实现方面,不需要经过协议栈的转化,而是直接使用类似于namedpipe的底层实现。本发明对Domian Socket的使用进行进一步的封装,使得接口通信不仅兼具***级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应用及上层WEB HTML5应用与二进制程序的调用过程进行说明。其中,上层Android应用与上层WEB HTML5应用二者之间是并列的关系。上层Android应用就是目前Android***的应用软件,如Android原生的拍照,计算器,QQ等;上层WEB HTML5 应用:是指基于HTML5标准之上,开发的在WEB浏览器上运行的程序,如百度***等提供的服务,微信的界面就是一个典型的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所示,上层WEB HTML5应用使用解耦接口动态调用二进制程序提供的***服务的过程包括:
S501、对上层WEB HTML5应用进行本地JS扩展;
S502、通过JS的动态绑定方式调用对应需要使用的解耦接口,在解耦接口中根据当前***传输下来的上下文获取上层WEB HTML5应用的通信数据;
S503、封装好通信数据后,使用二进制程序的公共接口进行通信,此时上层WEBHTML5应用与二进制程序自动连接配对;
S504、二进制程序接收到通信数据后,进行解析并根据解析结果,进行二进制程序的调用,执行相应的请求,并根据是否需要回执,对执行的结果进行处理。
对于WEB引擎的HTML5应用程序,需要调用二进制程序的服务时,对上层WEB HTML5应用进行本地JS扩展,WebCore与JavaScriptCore之间使用了V8 Proxy模式,WebCore为JavaScriptCore提供了一层Binding(绑定)层做为封装,使用JS 的动态绑定方式实现与C++层程序进行绑定,通过JS绑定方式调用对应需要使用的解耦接口,在解耦接口中根据当前***传输下来的上下文获取当前上层应用是运行在WEB引擎上的HTML5程序,同时获取到上层WEB HTML5应用的通信数据,通过自定义的私有通信协议,封装通信数据,包括上层WEBHTML5应用的名称和接口请求,从哪个目标调用程序调用哪个二进制程序,调用使用的什么要求的命令(cmd),是否需要被调用的二进制程序做出回执(needAck),封装好通信数据后,使用二进制程序的公共接口进行通信,此时上层WEB HTML5应用与二进制程序自动连接配对,二进制程序接收到通信数据后,解析通信数据,根据解析结果,进行二进制程序的调用,根据是否需要对目标调用程序进行进行回执(needAck),如果不需要回执,则执行完结束;如果需要回执,则封装反馈结果根据适配层的接口调用返回,适配层的接口根据上下文,把封装的反馈结果通过JS的动态绑定方式返回给上层WEB HTML5应用,上层WEB HTML5应用获得反馈结果后进行上层操作;底层服务与上层的通信结束后,对本次通信自动解耦,确保线程安全,下次上层虚拟机需要继续调用服务,需要进行重新的解耦操作。
现有技术中,***功能是通过屏蔽***芯片硬件架构或***通用功能的差异化,对上层应用提供统一的接口,只是对***的功能进行了统一的接口封装,而本发明中,是过对非芯片硬件架构的相关通用软件功能进行模块化,这些模块在***本身是没有的,而是进行了功能扩展,并以二进制程序的形式提供***级的服务并构成服务框架,定义一套标准化的公用接口,并通过运用于***级框架的高效、稳健的私有通信协议框架,兼容不同上层环境应用程序的解耦接口,本发明既包含了中间件方法的优点却又不局限于这些优点,而且比中间件具有更好的扩展性能,对于***没有的功能都可以有效扩展,能够解决中间件在智能电视等设备上无法解决的问题,如:智能电视对***性能、交互体验、***扩展、平台兼容性、技术积累等方面的越来越严苛的需求,如本发明涉及到的一系列的***本身没有的服务:UI引擎服务、***传屏协议服务、服务器长链接服务、虚拟设备操作服务。本发明能够显著的提升智能设备的使用体验和性能,降低对硬件的苛刻要求,同时显著提升开发人员的开发效率,而且接口机制设计上非常灵活,有非常方便的扩展性,能够方便、快捷的添加智能设备新的需求。
基于上述方法,一种使用二进制程序进行功能固化、与虚拟机实现软件解耦的***,其包括:
固化模块,用于对***功能进行固化,形成具有公共接口的***二进制程序;
通信模块,用于不同二进制程序之间使用私有通信协议进行数据通信;
调用模块,用于上层Android应用或上层WEB HTML5应用使用解耦接口动态调用二进制程序提供的***服务。
进一步,所述***功能包括:UI引擎、***传屏协议、虚拟设备操作及服务器长连接。
进一步,通信模块具体包括:
封装单元,用于当一个作为源进程的二进制程序需要使用另一个作为目标进程的二进制程序的服务时,源进程首先对要进行的调用进行数据封装;
传输单元,用于封装好通信数据后,通过本机的私有通信协议进行传输;
解析单元,用于接收到通信数据后,对接收到的通信数据进行解析,执行相应的请求,并根据是否需要回执,对执行的结果进行处理。
关于上述模块单元的技术细节在前面的方法中已有详述,故不再赘述。
应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。
Claims (9)
1.一种使用二进制程序进行功能固化、与虚拟机实现软件解耦的方法,其特征在于,包括步骤:
对***功能进行固化,形成具有公共接口的***二进制程序;
不同二进制程序之间使用私有通信协议进行数据通信;
上层Android应用或上层WEB HTML5应用使用解耦接口动态调用二进制程序提供的***服务;
所述上层WEB HTML5应用使用解耦接口动态调用二进制程序提供的***服务的过程包括:
对上层WEB HTML5应用进行本地JS扩展;
通过JS的动态绑定方式调用对应需要使用的解耦接口,在解耦接口中根据当前***传输下来的上下文获取上层WEB HTML5应用的通信数据;
封装好通信数据后,使用二进制程序的公共接口进行通信,此时上层WEB HTML5应用与二进制程序自动连接配对;
二进制程序接收到通信数据后,进行解析并根据解析结果,进行二进制程序的调用,执行相应的请求,并根据是否需要回执,对执行的结果进行处理。
2.根据权利要求1所述的使用二进制程序进行功能固化、与虚拟机实现软件解耦的方法,其特征在于,所述***功能包括:UI引擎、***传屏协议、虚拟设备操作及服务器长连接。
3.根据权利要求1所述的使用二进制程序进行功能固化、与虚拟机实现软件解耦的方法,其特征在于,不同二进制程序之间使用私有通信协议进行数据通信的过程包括:
当一个作为源进程的二进制程序需要使用另一个作为目标进程的二进制程序的服务时,源进程首先对要进行的调用进行数据封装;
封装好通信数据后,通过本机的私有通信协议进行传输;
目标进程接收到通信数据后,对接收到的通信数据进行解析,执行相应的请求,并根据是否需要回执,对执行的结果进行处理。
4.根据权利要求3所述的使用二进制程序进行功能固化、与虚拟机实现软件解耦的方法,其特征在于,二进制程序之间进行数据通信的过程还包括:
在进行数据封装时自动调整通信数据顺序,使在内存分配生成数据时占用最小的内存空间;
对顺序调整后的通信数据进行初始化时,使用内存中的二进制存储数据,将所有顺序调整后的通信数据拼接构造为一个二进制缓存,并存储于内存中,并循环的添加通信数据,得到一个二进制缓存流,在数据传输过程中直接传输所述二进制缓存流;
将接收到的二进制缓存流存储在***的缓存或者内存中;
读取二进制缓存流时,获得二进制缓存流的根对象指针,直接读取内存映射地址获取所需要的字段的内容。
5.根据权利要求3所述的使用二进制程序进行功能固化、与虚拟机实现软件解耦的方法,其特征在于,本机的私有通信协议使用Domain 套接字方式:
使用AF_LOCAL来申请一个本地套接字,所述本地套接字同时支持以字节流的形式传输的字节流套接口和以数据报的形式传输的数据报套接口。
6.根据权利要求1所述的使用二进制程序进行功能固化、与虚拟机实现软件解耦的方法,其特征在于,上层Android应用使用解耦接口动态调用二进制程序提供的***服务的过程包括:
上层Android应用通过JNI的方式调用到下层的JNI库的方法;
当JNI库方获取调用情况后,调用对应需要使用的解耦接口,在解耦接口中根据当前***传输下来的上下文获取上层Android应用的通信数据;
封装好通信数据后,使用二进制程序的公共接口进行通信,此时上层Android应用与二进制程序自动连接配对;
二进制程序接收到通信数据后,进行解析并根据解析结果,进行二进制程序的调用,执行相应的请求,并根据是否需要回执,对执行的结果进行处理。
7.一种使用二进制程序进行功能固化、与虚拟机实现软件解耦的***,其特征在于,包括:
固化模块,用于对***功能进行固化,形成具有公共接口的***二进制程序;
通信模块,用于不同二进制程序之间使用私有通信协议进行数据通信;
调用模块,用于上层Android应用或上层WEB HTML5应用使用解耦接口动态调用二进制程序提供的***服务;
所述上层WEB HTML5应用使用解耦接口动态调用二进制程序提供的***服务的过程包括:
对上层WEB HTML5应用进行本地JS扩展;
通过JS的动态绑定方式调用对应需要使用的解耦接口,在解耦接口中根据当前***传输下来的上下文获取上层WEB HTML5应用的通信数据;
封装好通信数据后,使用二进制程序的公共接口进行通信,此时上层WEB HTML5应用与二进制程序自动连接配对;
二进制程序接收到通信数据后,进行解析并根据解析结果,进行二进制程序的调用,执行相应的请求,并根据是否需要回执,对执行的结果进行处理。
8.根据权利要求7所述的使用二进制程序进行功能固化、与虚拟机实现软件解耦的***,其特征在于,所述***功能包括:UI引擎、***传屏协议、虚拟设备操作及服务器长连接。
9.根据权利要求7所述的使用二进制程序进行功能固化、与虚拟机实现软件解耦的***,其特征在于,通信模块具体包括:
封装单元,用于当一个作为源进程的二进制程序需要使用另一个作为目标进程的二进制程序的服务时,源进程首先对要进行的调用进行数据封装;
传输单元,用于封装好通信数据后,通过本机的私有通信协议进行传输;
解析单元,用于接收到通信数据后,对接收到的通信数据进行解析,执行相应的请求,并根据是否需要回执,对执行的结果进行处理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510534679.7A CN105204848B (zh) | 2015-08-27 | 2015-08-27 | 使用二进制程序进行功能固化并提供服务的方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510534679.7A CN105204848B (zh) | 2015-08-27 | 2015-08-27 | 使用二进制程序进行功能固化并提供服务的方法及*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105204848A CN105204848A (zh) | 2015-12-30 |
CN105204848B true CN105204848B (zh) | 2018-08-14 |
Family
ID=54952554
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510534679.7A Active CN105204848B (zh) | 2015-08-27 | 2015-08-27 | 使用二进制程序进行功能固化并提供服务的方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105204848B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108132816B (zh) * | 2016-12-01 | 2020-12-18 | 腾讯科技(深圳)有限公司 | 应用中实现本地框架层调用的方法和装置 |
CN106951250B (zh) * | 2017-03-20 | 2020-09-22 | 苏州浪潮智能科技有限公司 | 一种基于选项标识的指令解析方法及装置 |
CN107273226B (zh) * | 2017-06-30 | 2021-01-08 | 百度在线网络技术(北京)有限公司 | 在安卓***中集成组件及调用被集成组件的方法和装置 |
CN110413259B (zh) * | 2018-04-28 | 2022-07-29 | 中兴通讯股份有限公司 | Android服务框架、实现扩展服务的方法及装置 |
CN111552010A (zh) * | 2020-04-28 | 2020-08-18 | 杨军 | 一种全球气象灾害卫星遥感快速响应与可视化服务平台 |
CN112099769B (zh) * | 2020-09-15 | 2022-05-03 | 电子科技大学 | 一种具有统一数据传输接口的软件化雷达装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102323883A (zh) * | 2011-09-05 | 2012-01-18 | 广东东纳软件科技有限公司 | 一种基于安卓***的导航汽车信息管理*** |
CN102789381A (zh) * | 2011-12-31 | 2012-11-21 | 浙江创佳数字技术有限公司 | 一种在安卓***上实现符合dvb标准的数字电视方法 |
CN103746959A (zh) * | 2013-11-27 | 2014-04-23 | 上海斐讯数据通信技术有限公司 | OSGi环境下Java和C的通信机制的实现方法 |
-
2015
- 2015-08-27 CN CN201510534679.7A patent/CN105204848B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102323883A (zh) * | 2011-09-05 | 2012-01-18 | 广东东纳软件科技有限公司 | 一种基于安卓***的导航汽车信息管理*** |
CN102789381A (zh) * | 2011-12-31 | 2012-11-21 | 浙江创佳数字技术有限公司 | 一种在安卓***上实现符合dvb标准的数字电视方法 |
CN103746959A (zh) * | 2013-11-27 | 2014-04-23 | 上海斐讯数据通信技术有限公司 | OSGi环境下Java和C的通信机制的实现方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105204848A (zh) | 2015-12-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105204848B (zh) | 使用二进制程序进行功能固化并提供服务的方法及*** | |
US9280527B2 (en) | Method and system for directly mapping web services interfaces and Java interfaces | |
KR102354717B1 (ko) | 언어-독립형 디스패치를 위한 코드 서비스 기법 | |
US8966508B2 (en) | Method for executing hybrid web application and apparatus therefor | |
US8321876B2 (en) | System and method of dynamically loading and executing module devices using inter-core-communication channel in multicore system environment | |
US8639745B2 (en) | Providing a neutral interface to multiple cloud computing systems | |
US7904111B2 (en) | Mobile exchange infrastructure | |
US9449030B2 (en) | Method for native program to inherit same transaction content when invoked by primary program running in separate environment | |
CN102819452B (zh) | 一种从android***获取数据的方法 | |
CN101764843A (zh) | 远程过程调用的处理方法、***及客户端、服务器 | |
US20130145381A1 (en) | Web api server program, web api publication method | |
CN111443961A (zh) | 终端设备及其跨进程通信方法 | |
CN116132511A (zh) | 基于代理的传感器设备跨总线跨协议接入dds网络*** | |
US9614900B1 (en) | Multi-process architecture for a split browser | |
CN106775616B (zh) | 基于C++与Java混合编程的分布式服务*** | |
CN111324376A (zh) | 功能配置方法、装置、电子设备及计算机可读介质 | |
CN109343970B (zh) | 基于应用程序的操作方法、装置、电子设备及计算机介质 | |
CN111324395B (zh) | 调用方法、装置和计算机可读存储介质 | |
Kang et al. | Android RMI: a user-level remote method invocation mechanism between Android devices | |
US20230018149A1 (en) | Systems and methods for code generation for a plurality of architectures | |
CN115840590A (zh) | 基于安卓和ios跨端混合的方法、***、设备及存储介质 | |
CN113986466A (zh) | 一种面向云计算的gpu虚拟化***和方法 | |
CN115499307A (zh) | 面向边缘联邦学习部署架构、方法、装置及存储介质 | |
CN109669793B (zh) | 中间件进程内对象调用方法 | |
CN101651632B (zh) | 一种应用于电视台全台网主干平台的消息接入*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |