一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

安卓系统中隐藏API的直接调用方法、装置、设备及介质与流程

2022-06-01 08:51:43 来源:中国专利 TAG:

安卓系统中隐藏api的直接调用方法、装置、设备及介质
技术领域
1.本发明属于计算机技术领域,尤其涉及一种安卓系统中隐藏api的直接调用方法、装置、电子设备及存储介质。


背景技术:

2.在安卓开发过程中,有时需要实现某些特殊的功能或者效果,因此,我们需要去调用很多sdk(software development kit,软件开发工具包)中不存在但是实际上存在的api(application programming interface,应用程序接口),即隐藏api,这样的隐藏api通常是加有@hide标记的public类、方法或常量。
3.这样的隐藏api包括两类:
4.1.android系统自带的一些隐藏api应用程序接口;
5.2.实际开发中,系统开发人员在应用框架层(framework层)新增的一些api。
6.现有技术中,在android app层开发过程中,通常是利用java反射机制来调用隐藏api,这种反射调用方法相对于直接调用方法,需要额外编写隐藏api的空代码,过于复杂,开发效率低。另外,现有设备型号众多,不同型号设备中运行的安卓系统版本可能不同,而不同版本的系统之间差异较大,在开发过程中,部分设备中运行的安卓系统由于没有对应的一些隐藏api而导致可能出现一些程序异常。


技术实现要素:

7.本发明的目的在于提供一种安卓系统中隐藏api的直接调用方法、装置、电子设备及存储介质,旨在解决由于现有技术中利用java反射机制来调用隐藏api导致的开发效率低的问题。
8.一方面,本发明提供一种安卓系统中隐藏api的直接调用方法,所述方法包括下述步骤:
9.将获取到的第一framework.jar包封装在一个sdk中,所述sdk中包含有封装好的用于调用隐藏api的方法;
10.将所述sdk作为一个层添加到应用层和应用框架层之间,以使所述应用层通过所述sdk直接调用所述应用框架层中的隐藏api。
11.优选地,将获取到的第一framework.jar包封装在一个sdk中的步骤之前,还包括:
12.收集不同版本的安卓系统加载的第二framework.jar包;
13.对所述多个第二framework.jar包进行取并集处理,得到所述第一framework.jar包。
14.优选地,所述对所述多个第二framework.jar包进行取并集处理的步骤,包括:
15.对所述多个第二framework.jar包进行依赖配置;
16.基于已配置的依赖关系对所述多个第二framework.jar包进行字节码操作,得到所述第一framework.jar包,其中,所述字节码操作用于对api进行扫描和取并集处理。
17.优选地,对所述多个第二framework.jar包进行依赖配置时使用的模式为gradle的compileonly模式。
18.优选地,所述方法还包括:
19.根据新增的api重新封装所述sdk,以使所述应用层通过重新封装的sdk直接调用所述应用框架层中的隐藏api。
20.另一方面,本发明还提供了一种安卓系统中隐藏api的直接调用装置,所述装置包括:
21.sdk封装单元,用于将获取到的第一framework.jar包封装在一个sdk中,所述sdk中包含有封装好的用于调用隐藏api的方法;以及
22.sdk添加单元,用于将所述sdk作为一个层添加到应用层和应用框架层之间,以使所述应用层通过所述sdk直接调用所述应用框架层中的隐藏api。
23.优选地,所述装置还包括:
24.收集单元,用于收集不同版本的安卓系统加载的第二framework.jar包;以及
25.取并集处理单元,用于对所述多个第二framework.jar包进行取并集处理,得到所述第一framework.jar包。
26.优选地,所述取并集处理单元包括:
27.依赖配置单元,用于对所述多个第二framework.jar包进行依赖配置;以及
28.打包子单元,用于基于已配置的依赖关系对所述多个第二framework.jar包进行字节码操作,得到所述第一framework.jar包,其中,所述字节码操作用于对api进行扫描和取并集处理。
29.另一方面,本发明还提供了一种电子设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上所述方法的步骤。
30.另一方面,本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如上所述方法的步骤。
31.本发明将获取到的第一framework.jar包封装在一个sdk中,该sdk中包含有封装好的用于调用隐藏api的方法,将sdk作为一个层添加到应用层和应用框架层之间,以使应用层通过sdk直接调用应用框架层中的隐藏api,从而通过对应用层和应用框架层解耦实现了隐藏api的直接调用,提高了开发效率,使得程序稳定性提升。
附图说明
32.图1a是本发明实施例一提供的安卓系统中隐藏api的直接调用方法的实现流程图;
33.图1b是本发明实施例一提供的新建层的示例图;
34.图2是本发明实施例二提供的安卓系统中隐藏api的直接调用装置的实现流程图;以及
35.图3是本发明实施例三提供的电子设备的结构示意图。
具体实施方式
36.为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。还应当理解,在本技术说明书和所附权利要求书的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
37.以下结合具体实施例对本发明的具体实现进行详细描述:
38.实施例一:
39.图1a示出了本发明实施例一提供的安卓系统中隐藏api的直接调用方法的实现流程,为了便于说明,仅示出了与本发明实施例相关的部分,详述如下:
40.在步骤s101中,将获取到的第一framework.jar包封装在一个sdk中,该sdk中包含有封装好的用于调用隐藏api的方法。
41.本发明实施例适用于电子设备,该电子设备为安装有安卓系统的设备,具体地,该电子设备可以为手机、平板电脑、可穿戴设备、车载设备、增强现实(augmented reality,ar)/虚拟现实(virtual reality,vr)设备、笔记本电脑、超级移动个人计算机(ultra-mobile personal computer,umpc)、上网本、个人数字助理(personal digital assistant,pda)等终端设备,本技术实施例对电子设备的具体类型不作任何限制。在这里需要说明的是,本实施例中描述的用于调用隐藏api的方法是指可以执行的代码块。
42.现有技术中在开发android app(安卓应用程序)时,都是使用的sdk提供的android.jar包,该android.jar中移除了internal api(内部api)和hidden api(隐藏api)。因此,在开发时无法直接调用某些这些sdk中不存在的隐藏api。但安卓应用在电子设备上运行时,会加载系统应用框架层中的framework.jar包,即,加载/system/framework/framework.jar,该framework.jar包和android.jar包的唯一区别就是其没有移除internal api和hidden api。因此,该第一framework.jar包可以是安卓应用在电子设备上运行时加载的framework.jar包,也可以是在获取到上述加载的framework.jar包之后,由开发人员根据实际需要手动编辑过的framework.jar包。
43.考虑到实际开发过程中,可能需要同时适配多种版本的安卓设备,而不同版本的安卓设备加载的framework.jar包不同,即不同版本的安卓系统的应用框架层也不同,因此,通常需要对每个版本的安卓系统单独进行调式,其开发过程中调试的人力成本和时间成本较高。因此,单一版本下的安卓系统加载的framework.jar包无法满足开发人员的所有实际开发需要,即,无法满足开发过程中同时调用多个版本的安卓系统的应用框架层的隐藏api需求,从而优选地,在将获取到的第一framework.jar包封装在一个sdk中的步骤之前,收集不同版本的安卓系统加载的第二framework.jar包,对该多个第二framework.jar包进行取并集处理,得到上述的第一framework.jar包,从而通过收集不同版本系统的api来满足实际开发过程中对隐藏api的调用需求。
44.在收集了多个版本的安卓系统加载的framework.jar包之后,考虑到实际编译过程中api一旦出现重复会导致编译不过,因此,需要保证第一framework.jar包中的api不重复。从而优选地,在对该多个第二framework.jar包进行取并集处理时,对该多个第二framework.jar包进行依赖配置,基于已配置的依赖关系对该多个第二framework.jar包进行字节码操作,得到该第一framework.jar包,从而通过去除重复的api保证后续sdk编译顺
利通过。其中,该字节码操作用于对api进行扫描和取并集处理。具体实现中,可以先使用gradle的预设模式对该多个第二framework.jar包进行依赖配置,基于已配置的依赖关系,使用预先编译好的android gradle插件去扫描所有的第二framework.jar中的api,然后去掉相同的api,最终合并成一个总的framework.jar包,即上述的第一framework.jar包,该第一framework.jar包含所有的framework.jar中的api,并且所有的api不会重复。其中,该预设模式只需要保证sdk编译代码阶段可用即可,考虑到api调用过程中可能会出现由于隐藏api不存在而导致的一些程序异常,优选地,对多个第二framework.jar包进行依赖配置时使用的模式为gradle的compileonly模式,以保证后续sdk编译顺利通过,并保证了api调用过程中的程序正常。
45.作为示例地,若收集到的第二framework.jar包为三个,分别为framework-a.jar包、framework-b.jar包和framework-c.jar包,framework-a.jar包中包含api 1和api 2,framework-b.jar包中包含api 1和api 3、framework-c.jar包中包含api 2和api 3,则得到的第一framework.jar包中包含api 1、api 2和api3,且不重复。
46.在步骤s102中,将sdk作为一个层添加到应用层和应用框架层之间,以使应用层通过sdk直接调用应用框架层中的隐藏api。
47.在本发明实施例中,为了实现应用框架层(application framework)和应用层(applications)的解耦开发,可以在两层中间新建一层来解耦,让系统层和应用层通过新建的层来进行交互,该新建的层即为上述的可以让应用层调用的sdk,这样应用层不需要再通过反射机制来调用应用框架层的一些隐藏api,只需要调用该sdk里面封装好的方法,封装好的方法内部会去真正调用第一framework.jar包对应的应用框架层中的api,从而既加快了开发效率,也使程序稳定性提升。图1b是本发明实施例一提供的新建层的结构示例图,图1b中ultraframework即为新建层。
48.在这里需要指出的是,实际编译应用程序运行的时候,还是使用的安卓系统自身的framework.jar包。
49.在将该sdk作为一个层添加到应用层和应用框架层之间之后,考虑到会存在一些api调用的新需求,从而优选地,根据新增的api重新封装该sdk,以使该应用层通过重新封装的sdk直接调用该应用框架层中的隐藏api,从而通过维护sdk,进一步提高了开发效率。
50.在本发明实施例中,将获取到的第一framework.jar包封装在一个sdk中,该sdk中包含有封装好的用于调用隐藏api的方法,将sdk作为一个层添加到应用层和应用框架层之间,以使应用层通过sdk直接调用应用框架层中的隐藏api,从而通过对应用层和应用框架层解耦实现了隐藏api的直接调用,提高了开发效率,使得程序稳定性提升。
51.实施例二:
52.图2示出了本发明实施例二提供的安卓系统中隐藏api的直接调用装置的结构,为了便于说明,仅示出了与本发明实施例相关的部分,其中包括:
53.sdk封装单元,用于将获取到的第一framework.jar包封装在一个sdk中,该sdk中包含有封装好的用于调用隐藏api的方法;以及
54.sdk添加单元,用于将sdk作为一个层添加到应用层和应用框架层之间,以使应用层通过sdk直接调用应用框架层中的隐藏api。
55.优选地,该装置还包括:
56.收集单元,用于收集不同版本的安卓系统加载的第二framework.jar包;以及
57.取并集处理单元,用于对该多个第二framework.jar包进行取并集处理,得到该第一framework.jar包。
58.优选地,该取并集处理单元包括:
59.依赖配置单元,用于使用gradle的预设模式对该多个第二framework.jar包进行依赖配置;以及
60.打包子单元,用于基于已配置的依赖关系使用预编的gradle插件对该多个第二framework.jar包进行字节码操作,得到该第一framework.jar包,其中,该字节码操作用于对api进行扫描和取并集处理。
61.优选地,对多个第二framework.jar包进行依赖配置时使用的模式为gradle的compileonly模式。
62.优选地,该装置还包括:
63.更新单元,用于根据新增的api重新封装该sdk,以使该应用层通过重新封装的sdk直接调用该应用框架层中的隐藏api。
64.在本发明实施例中,安卓系统中隐藏api的直接调用装置的各单元可由相应的硬件或软件单元实现,各单元可以为独立的软、硬件单元,也可以集成为一个软、硬件单元,在此不用以限制本发明。安卓系统中隐藏api的直接调用装置的各单元的具体实施方式可参考前述方法实施例的描述,在此不再赘述。
65.实施例三:
66.图3示出了本发明实施例三提供的电子设备的结构,为了便于说明,仅示出了与本发明实施例相关的部分。
67.本发明实施例的电子设备3包括处理器30、存储器31以及存储在存储器31中并可在处理器30上运行的计算机程序32。该处理器30执行计算机程序32时实现上述各方法实施例中的步骤,例如图1所示的步骤s101至s102。或者,处理器30执行计算机程序32时实现上述各装置实施例中各单元的功能,例如图2所示单元21至22的功能。
68.在本发明实施例中,将获取到的第一framework.jar包封装在一个sdk中,该sdk中包含有封装好的用于调用隐藏api的方法,将sdk作为一个层添加到应用层和应用框架层之间,以使应用层通过sdk直接调用应用框架层中的隐藏api,从而通过对应用层和应用框架层解耦实现了隐藏api的直接调用,提高了开发效率,使得程序稳定性提升。
69.实施例四:
70.在本发明实施例中,提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序被处理器执行时实现上述方法实施例中的步骤,例如,图1所示的步骤s101至s102。或者,该计算机程序被处理器执行时实现上述各装置实施例中各单元的功能,例如图2所示单元21至22的功能。
71.在本发明实施例中,将获取到的第一framework.jar包封装在一个sdk中,该sdk中包含有封装好的用于调用隐藏api的方法,将sdk作为一个层添加到应用层和应用框架层之间,以使应用层通过sdk直接调用应用框架层中的隐藏api,从而通过对应用层和应用框架层解耦实现了隐藏api的直接调用,提高了开发效率,使得程序稳定性提升。
72.本发明实施例的计算机可读存储介质可以包括能够携带计算机程序代码的任何
实体或装置、记录介质,例如,rom/ram、磁盘、光盘、闪存等存储器。
73.以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献