首页 / 专利库 / 电脑零配件 / 固件 / 软件 / 基于Hidl的通用接口设计方法、装置、终端及可读存储介质

基于Hidl的通用接口设计方法、装置、终端及可读存储介质

阅读:1发布:2022-08-13

专利汇可以提供基于Hidl的通用接口设计方法、装置、终端及可读存储介质专利检索,专利查询,专利分析的服务。并且本 申请 提供了一种基于Hidl的通用 接口 设计方法、装置、终端及可读存储介质,所述方法包括:根据Hidl语法,设计一个同步函数,所述同步函数被调用时,会等待服务端处理完毕后再返回;根据Hidl语法,设计一个异步函数,所述异步函数被调用时,异步函数会直接返回;对同步函数及异步函数进行调用,按照预设的规则,将与同步函数及异步函数的参数类型相对应的参数进行填充,得到具体的通用接口。按照上述的基于Hidl的通用接口设计方法分别设计同步函数及异步函数,形成简洁、统一、通用、可复用的接口,防止开发过程中接口反复 修改 给开发人员造成的麻烦与困扰,极大提升了开发效率,也提升了 软件 质量 与 稳定性 。,下面是基于Hidl的通用接口设计方法、装置、终端及可读存储介质专利的具体信息内容。

1.一种基于Hidl的通用接口设计方法,其特征在于,包括:
根据Hidl语法,设计一个同步函数,所述同步函数被调用时,会等待服务端处理完毕后再返回;
根据Hidl语法,设计一个异步函数,所述异步函数被调用时,异步函数会直接返回;
对同步函数及异步函数进行调用,按照预设的规则,将与同步函数及异步函数的参数类型相对应的参数进行填充,得到具体的通用接口。
2.如权利要求1所述的基于Hidl的通用接口设计方法,其特征在于:所述根据Hidl语法,设计一个同步函数包括:
将同步函数的id的参数类型设为枚举类型MessageId,用于标识消息类型,以区分同步函数被调用时所需要调用的各个功能。
3.如权利要求2所述的基于Hidl的通用接口设计方法,其特征在于:所述根据Hidl语法,设计一个同步函数包括:
将同步函数的数据的参数类型定义为结构体类型Parcel,用于提供不同类型的参数配置。
4.如权利要求3所述的基于Hidl的通用接口设计方法,其特征在于:所述结构体类型Parcel包含一个32位整型的向量,一个字符串类型的向量以及一个8位无符号整型的向量。
5.如权利要求4所述的基于Hidl的通用接口设计方法,其特征在于:所述根据Hidl语法,设计一个同步函数包括:
将同步函数的返回值的参数类型定义为结构体类型Parcel,用于容纳返回的参数。
6.如权利要求5所述的基于Hidl的通用接口设计方法,其特征在于:所述根据Hidl语法,设计一个异步函数包括:
将异步函数的id的参数类型设为枚举类型MessageId,用于标识消息类型,以区分异步函数被调用时所需要调用的各个功能。
7.如权利要求6所述的基于Hidl的通用接口设计方法,其特征在于:所述根据Hidl语法,设计一个异步函数包括:
将异步函数的数据的参数类型定义为结构体类型Parcel,用于提供不同类型的参数配置。
8.一种基于Hidl的通用接口设计装置,其特征在于,包括:
同步函数设计模,用于根据Hidl语法,设计一个同步函数,所述同步函数被调用时,会等待服务端处理完毕后再返回;
异步函数设计模块,用于根据Hidl语法,设计一个异步函数,所述异步函数被调用时,异步函数会直接返回;
函数调用模块,用于对同步函数及异步函数进行调用,按照预设的规则,将与同步函数及异步函数的参数类型相对应的参数进行填充,得到具体的通用接口。
9.一种终端,包括存储器、处理器及存储在所述存储器上且在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时,实现如权利要求1至7任意一项所述的基于Hidl的通用接口设计方法中的各个步骤。
10.一种可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时,实现如权利要求1至7任意一项所述的基于Hidl的通用接口设计方法中的各个步骤。

说明书全文

基于Hidl的通用接口设计方法、装置、终端及可读存储介质

技术领域

[0001] 本申请涉及软件设计领域,尤其涉及一种基于Hidl的通用接口设计方法、装置、终端及可读存储介质。

背景技术

[0002] Android 8.0重新设计了Android操作系统框架,以便让制造商能够以更低的成本更轻松、更快速地将设备更新到新版Android系统。在这种新架构中,HAL接口定义语言(HIDL)指定了HAL和其用户之间的接口,让用户能够替换Android框架,而无需重新编译HAL。
[0003] HAL层的开发工程师按照HAL模所提供的功能,基于HIDL语言设计与编写模块的接口,并定义相关的数据类型,然后编写服务端代码以实现这些接口的处理逻辑。这样,客户端就可以调用这些接口,通过hardware binder来与服务端进行交互。
[0004] 按照HIDL语言的使用规范,将HAL服务端对外提供的各类接口编写为一个xxx.hal文件。另外,因为HIDL语言支持的数据类型十分有限,因此往往需要将模块自定义的枚举类型、结构体类型等编写为一个types.hal文件。
[0005] 按照现有的方案,需要为HAL服务端所提供的每一个服务,在对应的xxx.hal中编写一个接口函数。例如,如果编写一个“音频控制器”的HAL模块,那么我们可能需要在它的.hal文件中编写“加载歌曲”、“开始”、“暂停”、“上一首”、“下一首”、“修改音量”、“快进”、“快退”、“传输音频数据”等非常多的接口,并且每个接口的参数和返回值都不尽相同。
[0006] 实际开发过程中,客户端与服务端往往不是由同一人进行开发。当服务端接口发生变更时,如果没有及时通知客户端开发人员,则会造成编译错误、运行异常等一系列问题,既增加了开发人员的工作量,又造成了软件质量的不稳定。发明内容
[0007] 本申请实施例提供一种基于Hidl的通用接口设计方法、装置、终端及可读存储介质,至少能解决相关技术中服务端接口发生变更时,如果没有及时通知客户端开发人员,容易造成编译错误、运行异常的问题。
[0008] 第一方面,本申请实施例提供一种基于Hidl的通用接口设计方法,包括:
[0009] 根据Hidl语法,设计一个同步函数,所述同步函数被调用时,会等待服务端处理完毕后再返回;
[0010] 根据Hidl语法,设计一个异步函数,所述异步函数被调用时,异步函数会直接返回;
[0011] 对同步函数及异步函数进行调用,按照预设的规则,将与同步函数及异步函数的参数类型相对应的参数进行填充,得到具体的通用接口。
[0012] 第二方面,本申请实施例还提供一种基于Hidl的通用接口设计装置,包括:
[0013] 同步函数设计模块,用于根据Hidl语法,设计一个同步函数,所述同步函数被调用时,会等待服务端处理完毕后再返回;
[0014] 异步函数设计模块,用于根据Hidl语法,设计一个异步函数,所述异步函数被调用时,异步函数会直接返回;
[0015] 函数调用模块,用于对同步函数及异步函数进行调用,按照预设的规则,将与同步函数及异步函数的参数类型相对应的参数进行填充,得到具体的通用接口。
[0016] 第三方面,本申请实施例还提供一种终端,包括存储器、处理器及存储在所述存储器上且在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现如上述本申请实施例第一方面提供的基于Hidl的通用接口设计方法中的各个步骤。
[0017] 第四方面,本申请实施例中还提供一种可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,实现如上述本申请实施例第一方面提供的基于Hidl的通用接口设计方法中的各个步骤。
[0018] 由上可见,根据本申请方案所提供的基于Hidl的通用接口设计方法、装置、终端及可读存储介质,按照上述的基于Hidl的通用接口设计方法分别设计同步函数及异步函数,形成简洁、统一、通用、可复用的接口,能够满足各种实际场景的需求,对接口的统一与抽象,使得接口形式在整个开发流程中可以保持稳定不变,防止开发过程中接口反复修改给开发人员造成的麻烦与困扰,极大提升了开发效率,也提升了软件质量与稳定性附图说明
[0019] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0020] 图1为本申请一实施例中的基于Hidl的通用接口设计方法的流程示意图;
[0021] 图2为本申请一实施例中的设计同步函数的基本流程图
[0022] 图3为本申请一实施例中的设计异步函数的基本流程图;
[0023] 图4为本申请一实施例中的基于Hidl的通用接口设计装置框图
[0024] 图5为本申请一实施例中的同步函数设计模块示意框图;
[0025] 图6为本申请一实施例中的异步函数设计模块示意框图。

具体实施方式

[0026] 为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而非全部实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0027] 技术术语解释:
[0028] HAL:硬件抽象层,可定义一个标准接口以供硬件供应商实现,这可让Android忽略较低级别的驱动程序实现。借助HAL可以顺利实现相关功能,而不会影响或更改更高级别的系统。HAL实现会被封装成模块,并会由Android系统适时地加载。
[0029] Hidl:HAL接口定义语言,是用于指定HAL和其用户之间的接口的一种接口描述语言,是用于在可以独立编译的代码库之间进行通信的系统。
[0030] 为了解决相关技术中服务端接口发生变更时,如果没有及时通知客户端开发人员,容易造成编译错误、运行异常的问题,本申请第一实施例提供了一种基于Hidl的通用接口设计方法,如图1为本实施例提供的基于Hidl的通用接口设计方法基本流程图,该基于Hidl的通用接口设计方法包括以下步骤:
[0031] 步骤100、根据Hidl语法,设计一个同步函数,所述同步函数被调用时,会等待服务端处理完毕后再返回;
[0032] 所述同步函数形如:
[0033] sendMessage(MessageId id,Parcel data)generates(Parcel reply);
[0034] 步骤200、根据Hidl语法,设计一个异步函数,所述异步函数被调用时,异步函数会直接返回;
[0035] 所述异步函数形如:
[0036] oneway sendMessageAsync(MessageId id,Parcel data);
[0037] 开头的oneway标识指明该接口函数是一个异步函数,即该函数的调用不会等待服务端处理,就会直接返回,因此该函数没有返回值。
[0038] 步骤300、对同步函数及异步函数进行调用,按照预设的规则,将与同步函数及异步函数的参数类型相对应的参数进行填充,得到具体的通用接口。
[0039] 上述两种接口定义基本可以覆盖各种不同接口设计的需求。因为使用了MessageId这个枚举类型的参数,因此当添加、删除服务接口时,只需要在这个枚举类型内添加或删除相应的枚举元素即可,而不需要再添加新的接口或者删除就得接口,十分方便。
而自定义的结构体类型Parcel中,包含了三种不同类型的vector(在java中对应生成类型为ArrayList),这就使得接口的调用端(客户端)可以将各种类型的参数按照预设的规则填充到这三个向量中(称为装包),然后接收端(服务端)再按照同样的规则将这些向量中的数据提取出来还原成各个参数(称为解包),再进行对应操作即可。
[0040] 如图2所示,所述根据Hidl语法,设计一个同步函数包括:
[0041] 步骤101、将同步函数的id的参数类型设为枚举类型MessageId,用于标识消息类型,以区分同步函数被调用时所需要调用的各个功能。
[0042] 步骤102、将同步函数的数据的参数类型定义为结构体类型Parcel,用于提供不同类型的参数配置。
[0043] 步骤103、将同步函数的返回值的参数类型定义为结构体类型Parcel,用于容纳返回的参数。
[0044] 优选地,所述结构体类型Parcel包含一个32位整型的向量,一个字符串类型的向量以及一个8位无符号整型的向量。
[0045] 定义结构体类型的程序代码如下:
[0046] struct Parcel{
[0047] vecparams;
[0048] vecdatas;
[0049] vecbytedatas;
[0050] };
[0051] 如图3所示,所述根据Hidl语法,设计一个异步函数包括:
[0052] 步骤201、将异步函数的id的参数类型设为枚举类型MessageId,用于标识消息类型,以区分异步函数被调用时所需要调用的各个功能。
[0053] 步骤202、将异步函数的数据的参数类型定义为结构体类型Parcel,用于提供不同类型的参数配置。
[0054] 本发明的第二个具体的实施例,以“音频控制器”的HAL模块为例,按照现有方案需要定义并实现下列多个接口:
[0055] “加载歌曲”:
[0056] loadSong(string path)generates(int32_t ret);
[0057] “开始”:
[0058] start()generates(int32_t ret);
[0059] “暂停”:
[0060] pause()generates(int32_t ret);
[0061] “上一首”:
[0062] lastSong()generates(int32_t ret);
[0063] “下一首”:
[0064] nextSong()generates(int32_t ret);
[0065] “修改音量”:
[0066] changeVolume(int32_t volume)generates(int32_t ret);
[0067] “快进”:
[0068] fastForward(int32_t speed)generates(int32_t ret);
[0069] “快退”:
[0070] fastBackward(int32_t speed)generates(int32_t ret);
[0071] “传输音频数据”:
[0072] sendStream(vecstream)generates(int32_t ret);
[0073] 按照本方案实现则只需要实现两个接口:
[0074] sendMessage(MessageId id,Parcel data)generates(Parcel reply);
[0075] oneway sendMessageAsync(MessageId id,Parcel data);
[0076] 其中,MessageId枚举类型可以这样定义:
[0077] enum MessageId:uint32_t{
[0078] MESSAGEID_LOAD_SONG,
[0079] MESSAGEID_START,
[0080] MESSAGEID_PAUSE,
[0081] MESSAGEID_LAST_SONG,
[0082] MESSAGEID_NEXT_SONG,
[0083] MESSAGEID_CHANGE_VOLUME,
[0084] MESSAGEID_FAST_FORWARD,
[0085] MESSAGEID_FAST_BACKWARD,
[0086] MESSAGEID_SEND_STREAM,
[0087] };
[0088] 然后,分别将各个参数按照顺序填充如data Parcel中即可。服务端接收到后,根据MessageId的具体值,跳转到对应的处理函数中,再根据顺序从data Parcel中取出参数进行后续处理,最后将返回值填充到reply Parcel中返回即可。然后客户端再从reply Parcel中取出返回值。
[0089] 通过对接口的统一与抽象,使得接口形式在整个开发流程中可以保持稳定不变,既提升了.hal文件的简洁性,又提升了服务端代码的可读性、通用性和可复用性,也提升了各模块的开发效率,提升了软件稳定性。
[0090] 本方案的核心就是基于hidl语言,提供一套简洁、统一、通用、可复用的接口设计,使之满足各种实际场景的需求,防止开发过程中接口反复修改给开发人员造成的麻烦与困扰,极大提升了开发效率,也提升了软件质量与稳定性。
[0091] 如图4所示,本申请提供的第三个具体的实施例为:一种基于Hidl的通用接口设计装置,包括:
[0092] 同步函数设计模块600,用于根据Hidl语法,设计一个同步函数,所述同步函数被调用时,会等待服务端处理完毕后再返回;
[0093] 异步函数设计模块700,用于根据Hidl语法,设计一个异步函数,所述异步函数被调用时,异步函数会直接返回;
[0094] 函数调用模块800,用于对同步函数及异步函数进行调用,按照预设的规则,将与同步函数及异步函数的参数类型相对应的参数进行填充,得到具体的通用接口。
[0095] 如图5所示,所述同步函数设计模块600具体包括,
[0096] 同步函数id定义单元601,用于将同步函数的id的参数类型设为枚举类型MessageId,用于标识消息类型,以区分同步函数被调用时所需要调用的各个功能。
[0097] 同步函数数据定义单元602,用于将同步函数的数据的参数类型定义为结构体类型Parcel,用于提供不同类型的参数配置。
[0098] 同步函数返回值定义单元603,用于将同步函数的返回值的参数类型定义为结构体类型Parcel,用于容纳返回的参数。
[0099] 所述结构体类型Parcel包含一个32位整型的向量,一个字符串类型的向量以及一个8位无符号整型的向量。
[0100] 如图6所示,所述异步函数设计模块700具体包括,
[0101] 异步函数id定义单元701,用于将异步函数的id的参数类型设为枚举类型MessageId,用于标识消息类型,以区分异步函数被调用时所需要调用的各个功能。
[0102] 异步函数的数据定义单元702,用于将异步函数的数据的参数类型定义为结构体类型Parcel,用于提供不同类型的参数配置。
[0103] 应当说明的是,上述基于Hidl的通用接口设计方法的实施例均可基于本实施例提供的基于Hidl的通用接口设计装置实现,所属领域的普通技术人员可以清楚的了解到,为描述的方便和简洁,本实施例中所描述的基于Hidl的通用接口设计装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0104] 本申请还提供一种终端,包括存储器,处理器及存储在存储器上并可在处理器上运行的计算机程序,该处理器执行计算机程序时实现方法实施例提供的基于Hidl的通用接口设计方法中的各个步骤。
[0105] 本申请还提供一种存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现方法实施例提供的基于Hidl的通用接口设计方法中的各个步骤。
[0106] 在本发明各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
[0107] 所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0108] 需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本发明所必须的。
[0109] 在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
[0110] 以上为对本发明所提供的一种基于Hidl的通用接口设计方法、装置、终端及可读存储介质的描述,对于本领域的技术人员,依据本申请实施例的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本发明的限制。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈