CN116701017A - 安卓系统内非公开api的调用方法、装置、设备及介质 - Google Patents

安卓系统内非公开api的调用方法、装置、设备及介质 Download PDF

Info

Publication number
CN116701017A
CN116701017A CN202310654321.2A CN202310654321A CN116701017A CN 116701017 A CN116701017 A CN 116701017A CN 202310654321 A CN202310654321 A CN 202310654321A CN 116701017 A CN116701017 A CN 116701017A
Authority
CN
China
Prior art keywords
api
target
calling
public
target api
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.)
Pending
Application number
CN202310654321.2A
Other languages
English (en)
Inventor
温德平
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Ping An Bank Co Ltd
Original Assignee
Ping An Bank Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Ping An Bank Co Ltd filed Critical Ping An Bank Co Ltd
Priority to CN202310654321.2A priority Critical patent/CN116701017A/zh
Publication of CN116701017A publication Critical patent/CN116701017A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明涉及金融科技和计算机技术领域,公开了一种安卓系统内非公开API的调用方法、装置、设备及介质,方法包括:获取功能请求信息,并确定目标API;基于目标API的历史调用信息判断目标API是否为非公开API;若目标API为非公开API,则获取目标API的豁免条件,并基于豁免条件对目标API进行设置,以使目标API暴露在java层中,基于元反射方法调用设置豁免条件后的目标API,以完成目标API的调用。通过元反射方法调用设置有豁免条件的目标API少去了将自定义的类变成系统类的过程,方便快捷。通过豁免条件,在不改变原有代码的情况下实现对非公开API的调用,使得调用非公开API的过程不受限制。

Description

安卓系统内非公开API的调用方法、装置、设备及介质
技术领域
本发明涉及计算机技术及金融科技领域,尤其涉及一种安卓系统内非公开API的调用方法、装置、设备及介质。
背景技术
随着计算机技术的发展,在进行安卓(Android)系统开发时,越来越多的API(Application Program Interface,应用程序接口)可供开发人员直接调用,为开发人员提供了便利,进而大大提高了开发人员的开发效率。
然而,可能是API尚存在不稳定因素,或者是API提供者并不想对外开放API,故而,在Android源代码中仍存在部分不公开API是无法供开发人员直接调用的。Android(安卓)应用程序由于源码是公开的,系统框架(framework)层是由JAVA语言(一门面向对象编程语言)开发的,APP(application,应用程序)调用的一些类和方法,都和系统底层的一些JAVA类相关。JAVA语言提供了反射机制,即使一些系统类是private(私有的)或者protected(受保护)的,也可以通过反射。
但是,在应用程序开发过程中,部分特殊情况下,APP开发确实需要反射调用不公开API来完成一些功能和工作,但是由于系统限制,当应用程序调用禁止反射的不公开API时,会表现出不同的形态,在低版本上会在logcat输出错误提示信息,此时直接反射会被提示警告,而在高版本上,例如在最新的2019年的Android Q(在2019年推出的新一代操作系统)上,会提示找不到这个JAVA方法等各种错误形式,此时直接反射已经找不到JAVA方法和JAVA类的属性字段,也就是提示这个不公开API不存在,这会影响到APP运行逻辑,严重时甚至可能导致APP崩溃。
以往调用这些非公开的API都只需要经过反射即可调用,但从Android P(28)版本开始,平台对应用能使用的非公开接口(hide API)实施了限制。只要应用调用了非公开接口或尝试使用反射或java调用本地方法的技术(JNI)来获取非公开接口句柄,就会被限制。现有技术中通过摒弃使用非公开API,为非公开API寻找平替方案,但实际操作过程中往往很难找到平替方案。现有技术中还可以把调用源变成系统类,再去调用反射调用非公开API,但将自定义的类变成系统类的过程涉及到类加载和类加载器的相关知识,操作难度大,调用不公开的API的过程繁琐,不易实现。
发明内容
有鉴于此,本发明提供了一种安卓系统内非公开API的调用方法、装置、设备及介质,用于解决现有技术中针对非公开API的调用过程繁琐,不易实现的问题。
为达上述之一或部分或全部目的或是其他目的,本发明提出一种安卓系统内非公开API的调用方法,包括:获取功能请求信息,识别所述功能请求信息针对的API数据,并根据所述API数据确定目标API;
基于所述目标API的历史调用信息判断所述目标API是否为非公开API;
若所述目标API不为非公开API,则基于所述功能请求信息调用所述目标API;
若所述目标API为非公开API,则获取所述目标API的豁免条件,并基于所述豁免条件对所述目标API进行设置,将设置豁免条件后的目标API暴露在java层中,通过所述元反射方法调用设置豁免条件后的目标API,以完成所述目标API的调用,所述元反射方法通过反射获取。
另一方面,本申请提供了一种安卓系统内非公开API的调用装置,所述装置包括:
请求接收模块,用于获取功能请求信息,识别所述所述功能请求信息针对的API数据,并根据所述API数据确定目标API;
判断模块,用于基于所述目标API的历史调用信息判断所述目标API是否为非公开API;
调用模块,用于若所述目标API不为非公开API,则基于所述功能请求信息调用所述目标API;
所述调用模块,还用于若所述目标API为非公开API,则获取所述目标API的豁免条件,并基于所述豁免条件对所述目标API进行设置,将设置豁免条件后的目标API暴露在java层中,通过所述元反射方法调用设置豁免条件后的目标API,以完成所述目标API的调用,所述元反射方法通过反射获取。
另一方面,本申请提供了一种电子设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过所述总线通信,所述机器可读指令被所述处理器执行时执行:获取功能请求信息,识别所述功能请求信息针对的API数据,并根据所述API数据确定目标API;基于所述目标API的历史调用信息判断所述目标API是否为非公开API;若所述目标API不为非公开API,则基于所述功能请求信息调用所述目标API;若所述目标API为非公开API,则获取所述目标API的豁免条件,并基于所述豁免条件对所述目标API进行设置,将设置豁免条件后的目标API暴露在java层中,通过所述元反射方法调用设置豁免条件后的目标API,以完成所述目标API的调用,所述元反射方法通过反射获取。
另一方面,本申请提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行:获取功能请求信息,识别所述功能请求信息针对的API数据,并根据所述API数据确定目标API;基于所述目标API的历史调用信息判断所述目标API是否为非公开API;若所述目标API不为非公开API,则基于所述功能请求信息调用所述目标API;若所述目标API为非公开API,则获取所述目标API的豁免条件,并基于所述豁免条件对所述目标API进行设置,将设置豁免条件后的目标API暴露在java层中,通过所述元反射方法调用设置豁免条件后的目标API,以完成所述目标API的调用,所述元反射方法通过反射获取。
实施本发明实施例,将具有如下有益效果:
通过获取功能请求信息,识别所述功能请求信息针对的API数据,并根据所述API数据确定目标API;基于所述目标API的历史调用信息判断所述目标API是否为非公开API;若所述目标API不为非公开API,则基于所述功能请求信息调用所述目标API;若所述目标API为非公开API,则获取所述目标API的豁免条件,并基于所述豁免条件对所述目标API进行设置,将设置豁免条件后的目标API暴露在java层中,通过所述元反射方法调用设置豁免条件后的目标API,以完成所述目标API的调用,所述元反射方法通过反射获取。通过元反射方法调用设置有豁免条件的目标API减少了将自定义的类变成系统类的过程,方便快捷。通过豁免条件,在不改变原有代码的情况下实现对非公开API的调用,使得调用非公开API的过程不受限制。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
其中:
图1是本申请实施例提供的一种安卓系统内非公开API的调用方法的应用场景图;
图2是本申请实施例提供的一种安卓系统内非公开API的调用方法的流程图;
图3是本申请实施例提供的一种安卓系统内非公开API的调用装置的结构示意图;
图4是本发明一实施例中计算机设备的一结构示意图;
图5是本发明一实施例中计算机设备的另一结构示意图。
图6是本申请实施例提供的一种电子设备的结构示意图;
图7是本申请实施例提供的一种存储介质的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1,图1是根据一示例性实施例示出的一种计算机设备的框图。该种计算机设备中部署有冯诺依曼体系结构,例如,该种计算机设备可以是台式电脑、笔记本电脑、服务器等。
需要说明的是,该种计算机设备只是一个适配于本发明的示例,不能认为是提供了对本发明的使用范围的任何限制。该种计算机设备也不能解释为需要依赖于或者必须具有图1中示出的示例性的计算机设备200中的一个或者多个组件。
计算机设备200的硬件结构可因配置或者性能的不同而产生较大的差异,如图1所示,计算机设备200包括:电源210、接口230、至少一存储器250、以及至少一中央处理器(CPU,Central Processing Units)270。
具体地,电源210用于为计算机设备200上的各硬件设备提供工作电压。
接口230包括至少一有线或无线网络接口231、至少一串并转换接口233、至少一输入输出接口235以及至少一USB接口237等,用于与外部设备通信。
存储器250作为资源存储的载体,可以是只读存储器、随机存储器、磁盘或者光盘等,其上所存储的资源包括操作系统251、应用程序253及数据255等,存储方式可以是短暂存储或者永久存储。
其中,操作系统251用于管理与控制计算机设备200上的各硬件设备以及应用程序253,以实现中央处理器270对海量数据255的计算与处理,操作系统251可以是WindowsServerTM、Mac OS XTM、UnixTM、LinuxTM、FreeBSDTM等。
应用程序253是基于操作系统251之上完成至少一项特定工作的计算机程序,其可以包括至少一模块(图1中未示出),每个模块都可以分别包含有对计算机设备200的一系列计算机可读指令。
数据255可以是存储于磁盘中的照片、图片等。
中央处理器270可以包括一个或多个以上的处理器,并设置为通过总线与存储器250通信,用于运算与处理存储器250中的海量数据255。
如上面所详细描述的,适用本发明的计算机设备200将通过中央处理器270读取存储器250中存储的一系列计算机可读指令的形式来完成获取功能请求信息,识别所述功能请求信息针对的API数据,并根据所述API数据确定目标API;基于所述目标API的历史调用信息判断所述目标API是否为非公开API;若所述目标API不为非公开API,则基于所述功能请求信息调用所述目标API;若所述目标API为非公开API,则获取所述目标API的豁免条件,并基于所述豁免条件对所述目标API进行设置,将设置豁免条件后的目标API暴露在java层中,通过所述元反射方法调用设置豁免条件后的目标API,以完成所述目标API的调用,所述元反射方法通过反射获取的过程。
具体的,在开发金融程序时,例如,在开发掌上银行软件,网页支付程序时,以谷歌浏览器为基础为例,谷歌浏览器继续加强了对非公开接口(API)的使用限制,黑名单接口数量大幅增长,部分非公开接口(API)被通过以往的方式无法继续被调用,导致大面积应用无法正常使用,因此为保证用户对掌上银行软件或者网页支付程序的正常使用,可以采用重新开发掌上银行软件或者网页支付程序的方法,但重新开发掌上银行软件或者网页支付程序需要开发人员投入大量时间和精力,所以为减少时间和精力的成本,通过获取功能请求信息,识别所述所述功能请求信息针对的API数据,并根据所述API数据确定目标API;基于所述目标API的历史调用信息判断所述目标API是否为公开API;若所述目标API为公开API,则基于所述功能请求信息调用所述目标API;若所述目标API为非公开API,则通过反射获取元反射方法,为所述目标API设置豁免条件,并将所述目标API暴露在java层中,基于所述元反射方法调用设置有豁免条件的目标API,完成所述目标API的调用。通过元反射方法调用设置有豁免条件的目标API减少了将自定义的类变成系统类的过程,方便快捷。通过豁免条件,在不改变原有代码的情况下实现对非公开API的调用,使得调用非公开API的过程不受限制。
如图2所示,本申请实施例提供了一种安卓系统内非公开API的调用方法,包括:
S101、获取功能请求信息,识别所述所述功能请求信息针对的API数据,并根据所述API数据确定目标API;
在一种可能的实施方式中,所述识别所述请求信息针对的API数据,并根据所述API数据确定目标API的步骤,包括:
获取历史数据,所述历史数据包括:历史请求信息和所述历史请求信息对应的历史API数据;
匹配所述历史请求信息与所述功能请求信息,得到所述历史请求信息中与所述功能请求信息类型一致的目标功能请求信息;
根据所述目标功能请求信息确定初始API数据,所述初始API数据包括所述目标功能请求信息对应的所有API的标识信息和所述目标功能请求信息对应的所有API的个数;
选择所述目标功能请求信息对应的所有API的个数最少的初始API数据作为目标历史API数据;
基于所述目标历史API数据确定所述目标API。
示例性的,以银行等企业为例,越来越多的业务需要实现网上办理,进而需要开发越来越多的应用软件、应用程序,而在开发过程中不可避免的需要调用各种类型的API,例如,当在开发“网上银行”软件/程序时,需要调用具有读写功能的API、数据交互的API等,在众多的API中,往往存在伴随应用系统版本变换而无法正常调用的API,即,非公开API。
具体的,需要获取历史请求信息和所述历史请求信息对应的历史API数据,匹配所述历史请求信息与所述功能请求信息,得到所述历史请求信息中与所述功能请求信息类型一致的目标功能请求信息,例如,当前的功能请求信息需要实现数据读写类的功能,则在所述历史请求信息中筛选出同类型的实现读写功能的历史请求信息,进而确定实现读写功能的历史请求信息调用了哪些API,由于同一功能在实现的过程中存在差异,因此,同一功能在实现的过程中调用的API并不相同,选择实现读写功能过程调用API的个数最少的历史请求信息作为目标功能请求信息,确定目标API。
通过选择实现读写功能过程调用API的个数最少的历史请求信息作为目标功能请求信息,减少不必要的调用,选择最简洁的路径完成目标功能,有利于程序的运行,提高功能实现的速度。
另一种目标API的确定方法为:
根据实现读写功能过程调用API的集合,构建加权API有向图模型;其中,加权API有向图模型中每个节点对应给定的API集合中一种API,加权API有向图模型中有向边表示有向边的两个节点所对应的API之间的依赖关系;加权API有向图模型中有向边上的权重表示被调用次数的正则化形式;
确定实现读写功能的初始API和终止API,进而查找出加权API有向图模型中所对应的节点并分别作为起点和终点;
遍历加权API有向图模型中从所述起点到所述终点的所有路径,形成API调用序列候选集合;具体为:将遍历的所有路径按照权重之和从小到大排序,得到按照服务质量从优到劣排序的API调用序列;
从API调用序列候选集合中,筛选出服务质量从优到劣排在预设位数之前的API调用序列并依次推荐给客户端,即,将API调用序列上的各API作为所述目标API。
示例性的,若特定功能需要特定顺序的API集合时,将特定顺序的API集合视为整体。
示例性的,目标API对应的请求路径分别为:/a/c、/a/d/insert、/a/d/delete、/a/d/update、/a/d/get、/b/e和/b/f。
首先将目标API导入API网关,并分别存入数据库。
接着API网关提取API对应的请求路径,并创建请求路径根目录表,存储根目录的请求路径:
再动态创建子目录表,并将请求路径信息存储到子目录表中:一级目录表存储的请求路径为:/a和/b,二级目录表存储的请求路径为:/d、/e和/f,三级目录表存储的请求路径为:/insert、/delete、/update和/get。
如果请求路径没有对应的API,那么请求路径信息中对应的API字段为空;例如:/a没有对应的API,那么/a这条数据中对应的API字段为空。提取数据库中的请求路径,并进行层级展示,效果如下所示:
/
---/a
------/c
------/d
---------/insert
---------/delete
---------/update
---------/get
---/b
------/e
------/f
用户在API网关上配置外部API,一个外部API可以对应一个或多个内部API:配置一个外部API,请求路径为/a/d,对应四个内部API:/a/d/insert、/a/d/delete、/a/d/update、/a/d/get;/a/d为前缀匹配请求路径,会匹配所有/a/d开头的请求路径。进而确定最优的请求路径,以确定目标API。
S102、基于所述目标API的历史调用信息判断所述目标API是否为非公开API;
在一种可能的实施方式中,所述基于所述目标API的历史调用信息判断所述目标API是否为非公开API的步骤,包括:
获取所述目标API的历史调用信息;
解析所述历史调用信息,得到解析数据,若所述解析数据中含有目标注解,例如@hide注解,则判断所述目标API为非公开API;
若所述解析数据中不含有目标注解,则判断所述目标API不为非公开API。
具体的,获取所述目标API在低版本的调用信息,例如,安卓系统9.0版本前的其他版本的调用信息,由于在低版本时,非公开API通过反射调用是可以被调用的,但非公开API在被调用时的调用信息中会被打上目标注解,因此,在高版本,例如,安卓系统9.0版本及其以后版本,进行非公开API识别时,在所述目标API的历史调用信息中查找目标注解,方便快捷,无需额外构建非公开API表,也无需将目标API的身份标识与非公开API表进行对比,减少计算量,解放资源占用。
类或API是否开放,是通过文档doc的注释,即,{@hide}来控制的,比如android.media.Metadata这个类就是android没有公开的类,因为在frameworks\base\media\libmedia\Metadata.java文件中,定义Metadata类之前有/**{@hide}*/此doc注释,所以Metadata类被定义为了非公开类,即是在android应用程序中无法直接访问的类。
在判断所述目标API是否为公开API时,还可以获得安卓系统的隐藏API列表;将目标应用程序的程序代码转化为抽象语法树;基于所述隐藏API列表,对所述抽象语法树进行语法树分析,获得所述目标应用程序对隐藏API的调用信息。
S103、若所述目标API不为非公开API,则基于所述功能请求信息调用所述目标API;
若所述目标API为公开API,即,所述目标API在低版本的调用信息中不存在目标注解,则基于所述功能请求信息调用所述目标API;
S104、若所述目标API为非公开API,则获取所述目标API的豁免条件,并基于所述豁免条件对所述目标API进行设置,将设置豁免条件后的目标API暴露在java层中,通过所述元反射方法调用设置豁免条件后的目标API,以完成所述目标API的调用,所述元反射方法通过反射获取。
在一种可能的实施方式中,所述通过反射获取元反射方法的步骤,包括:
将通过类(class)反射API获取目标方法,例如,`getDeclardMethod`方法作为元反射方法;
将通过反射所述元反射方法再次调用目标方法作为通过反射获取元反射方法。
示例性的,伪代码为:
//公开API,无问题
Method metaGetDeclaredMethod=Class.class.getDeclaredMethod("getDeclardMethod");
//系统类通过反射使用隐藏API,检查直接通过。
Method hiddenMethod=metaGetDeclaredMethod.invoke(hiddenClass,
"hiddenMethod","hiddenMethod args");
//正确找到Method直接反射调用
hiddenMethod.invoke();
基于所述伪代码能通过元反射的方式去任意获取隐藏方法或者隐藏字段(Field)。
在一种可能的实施方式中,所述为所述目标API设置豁免条件的步骤,包括:
通过修改运行标志(runtime flag)的方式修改目标语句,例如,`hidden_API_exemptions_`语句为所述目标API设置豁免条件。
在一种可能的实施方式中,所述为所述目标API设置豁免条件的步骤,还包括:
通过修改目标函数,即,IsExempted函数中的目标参数语句,即,`runtime->GetHiddenAPIExemptions()`参数语句为所述目标API设置豁免条件。
通过跟踪函数代码:
确定当`IsExempted`方法返回true时,就算被调用方法/API在黑名单中,依然会被放行然后允许被调用,因此继续追踪`IsExempted`方法:
基于上述代码可知,`runtime->GetHiddenApiExemptions()`是IsExempted函数里面的一个参数,因此通过修改IsExempted函数中的`runtime->GetHiddenAPIExemptions()`参数语句为所述目标API设置豁免条件,还可以通过修改运行时标志(runtime flag)的方式修改`hidden_API_exemptions_`语句为所述目标API设置豁免条件。
在一种可能的实施方式中,所述将设置豁免条件后的目标API暴露在java层中的步骤,包括:
采用预设方法,例如,VMRuntime.setHiddenAPIExemptions Java方法将所述目标API暴露在java层中,以使所述目标API能够被所述元反射方法调用。
将非公开API暴露到Java层中有一个对应的VMRuntime.setHiddenApiExemptionsJava方法,通过元反射来反射调用VMRuntime.setHiddenApiExemptions即可使所述目标API能够被所述元反射方法调用。
所述Java层包括:交互层(controller)、业务处理层(service)和数据操作层(mapper),其中,通过元反射来反射调用VMRuntime.setHiddenApiExemptions即可使所述目标API暴露在交互层(controller),以使业务处理层能够调用所述目标API,同时数据操作层能够操作所述目标API传输的数据。
示例性的,所述目标API的调用过程可以为:应用程序在需要调用某个API,例如上述目标API时,可以构造目的IP地址为网关系统的IP地址的调用请求,以将该调用请求发送给网关系统;其中,该调用请求可以用于调用目标API。
在实际应用中,该调用请求中除了可以包含需要通过调用目标API进行处理的参数之外,还可以包含目标API的接口标识(例如:接口名)。网关系统在接收到该调用请求后,可以首先基于该接口标识确定对应的API,该API即为发送该调用请求的应用程序需要调用的目标API。
后续,网关系统可以调用目标API,以基于目标API对应的服务(称为目标服务),对该调用请求中的参数进行处理;其中,目标服务为通过目标API提供给调用方进行调用的预定义的函数。在这种情况下,基于目标服务对该调用请求中的参数进行处理,即为将该调用请求中的参数代入预定义的函数进行计算,而参数处理结果也即为计算结果。
网关系统在完成基于目标服务对该调用请求中的参数的处理后,可以将参数处理结果返回给发送该调用请求的上述应用程序。该应用程序在接收到该参数处理结果后,可以基于该参数处理结果进行后续进一步的处理,也可以将该参数处理结果展示给用户以供查看,在本申请中对此不作特别限定。
在一种可能的实施方式中,如图3所示,本申请提供了一种安卓系统内非公开API的调用装置,所述装置包括:
请求接收模块101,用于获取功能请求信息,识别所述所述功能请求信息针对的API数据,并根据所述API数据确定目标API;
判断模块102,用于基于所述目标API的历史调用信息判断所述目标API是否为非公开API;
调用模块103,用于若所述目标API不为非公开API,则基于所述功能请求信息调用所述目标API;
所述调用模块103,还用于若所述目标API为非公开API,则获取所述目标API的豁免条件,并基于所述豁免条件对所述目标API进行设置,将设置豁免条件后的目标API暴露在java层中,通过所述元反射方法调用设置豁免条件后的目标API,以完成所述目标API的调用,所述元反射方法通过反射获取。
在一种可能的实施方式中,所述请求接收模块101,具体用于:
获取历史数据,所述历史数据包括:历史请求信息和所述历史请求信息对应的历史API数据;
匹配所述历史请求信息与所述功能请求信息,得到所述历史请求信息中与所述功能请求信息类型一致的目标功能请求信息;
根据所述目标功能请求信息确定初始API数据,所述初始API数据包括所述目标功能请求信息对应的所有API的标识信息及所有API的个数;
选择所述目标功能请求信息对应的所有API的个数最少的初始API数据作为目标历史API数据;
基于所述目标历史API数据确定所述目标API。
在一种可能的实施方式中,所述判断模块102,具体用于:
获取所述目标API的历史调用信息;
解析所述历史调用信息,得到解析数据,若所述解析数据中含有目标注解,则判断所述目标API为非公开API;
若所述解析数据中不含有目标注解,则判断所述目标API不为非公开API。
在一种可能的实施方式中,所述调用模块103,具体用于:
将通过类反射API获取目标方法作为元反射方法,所述目标方法为获取类自身声明的所有方法;
将通过反射所述元反射方法再次调用所述目标方法作为通过反射获取元反射方法。
在一种可能的实施方式中,所述调用模块103,具体用于:
通过修改运行标志的方式修改所述目标API的目标语句,所述目标语句为非公开API的豁免语句;
通过修改后的目标语句为所述目标API设置豁免条件。
在一种可能的实施方式中,所述调用模块103,具体用于:
修改调用所述目标API的目函数中的目标参数语句;
通过修改后的目标参数语句为所述目标API设置豁免条件。
在一种可能的实施方式中,所述调用模块103,具体用于:
采用预设方法将所述目标API暴露在java层中,以使所述目标API能够被所述元反射方法调用。
本发明提供了一种非公开API调用装置,通过获取功能请求信息,识别所述功能请求信息针对的API数据,并根据所述API数据确定目标API;基于所述目标API的历史调用信息判断所述目标API是否为非公开API;若所述目标API不为非公开API,则基于所述功能请求信息调用所述目标API;若所述目标API为非公开API,则获取所述目标API的豁免条件,并基于所述豁免条件对所述目标API进行设置,将设置豁免条件后的目标API暴露在java层中,通过所述元反射方法调用设置豁免条件后的目标API,以完成所述目标API的调用,所述元反射方法通过反射获取。通过元反射方法调用设置有豁免条件的目标API少去了将自定义的类变成系统类的过程,方便快捷。通过豁免条件,在不改变原有代码的情况下实现对非公开API的调用,使得调用非公开API的过程不受限制。
关于非公开API的调用装置的具体限定可以参见上文中对于安卓系统内非公开API的调用方法的限定,在此不再赘述。上述报表推荐装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务端,其内部结构图可以如图4所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性和/或易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的客户端通过网络连接通信。该计算机程序被处理器执行时以实现一种安卓系统内非公开API的调用方法服务端侧的功能或步骤。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是客户端,其内部结构图可以如图5所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部服务器通过网络连接通信。该计算机程序被处理器执行时以实现一种安卓系统内非公开API的调用方法客户端侧的功能或步骤。
在一种可能的实施方式中,如图6所示,本申请实施例提供了一种电子设备300,包括:包括存储器310、处理器320及存储在存储器310上并可在处理器320上运行的计算机程序311,处理器320执行计算机程序311时,实现:获取功能请求信息,识别所述功能请求信息针对的API数据,并根据所述API数据确定目标API;基于所述目标API的历史调用信息判断所述目标API是否为非公开API;若所述目标API不为非公开API,则基于所述功能请求信息调用所述目标API;若所述目标API为非公开API,则获取所述目标API的豁免条件,并基于所述豁免条件对所述目标API进行设置,将设置豁免条件后的目标API暴露在java层中,通过所述元反射方法调用设置豁免条件后的目标API,以完成所述目标API的调用,所述元反射方法通过反射获取。
通过获取功能请求信息,识别所述功能请求信息针对的API数据,并根据所述API数据确定目标API;基于所述目标API的历史调用信息判断所述目标API是否为非公开API;若所述目标API不为非公开API,则基于所述功能请求信息调用所述目标API;若所述目标API为非公开API,则获取所述目标API的豁免条件,并基于所述豁免条件对所述目标API进行设置,将设置豁免条件后的目标API暴露在java层中,通过所述元反射方法调用设置豁免条件后的目标API,以完成所述目标API的调用,所述元反射方法通过反射获取。通过元反射方法调用设置有豁免条件的目标API减少了将自定义的类变成系统类的过程,方便快捷。通过豁免条件,在不改变原有代码的情况下实现对非公开API的调用,使得调用非公开API的过程不受限制。
在一种可能的实施方式中,如图7所示,本申请实施例提供了一种计算机可读存储介质400,其上存储有计算机程序411,该计算机程序411被处理器执行时实现:获取功能请求信息,识别所述功能请求信息针对的API数据,并根据所述API数据确定目标API;基于所述目标API的历史调用信息判断所述目标API是否为非公开API;若所述目标API不为非公开API,则基于所述功能请求信息调用所述目标API;若所述目标API为非公开API,则获取所述目标API的豁免条件,并基于所述豁免条件对所述目标API进行设置,将设置豁免条件后的目标API暴露在java层中,通过所述元反射方法调用设置豁免条件后的目标API,以完成所述目标API的调用,所述元反射方法通过反射获取。
通过获取功能请求信息,识别所述功能请求信息针对的API数据,并根据所述API数据确定目标API;基于所述目标API的历史调用信息判断所述目标API是否为非公开API;若所述目标API不为非公开API,则基于所述功能请求信息调用所述目标API;若所述目标API为非公开API,则获取所述目标API的豁免条件,并基于所述豁免条件对所述目标API进行设置,将设置豁免条件后的目标API暴露在java层中,通过所述元反射方法调用设置豁免条件后的目标API,以完成所述目标API的调用,所述元反射方法通过反射获取。通过元反射方法调用设置有豁免条件的目标API减少了将自定义的类变成系统类的过程,方便快捷。通过豁免条件,在不改变原有代码的情况下实现对非公开API的调用,使得调用非公开API的过程不受限制。
本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是但不限于:电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,上述程序设计语言包括面向对象的程序设计语言,诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
本领域普通技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个计算装置上,或者分布在多个计算装置所组成的网络上,可选地,他们可以用计算机装置可执行的程序代码来实现,从而可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件的结合。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里上述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。

Claims (10)

1.一种安卓系统内非公开API的调用方法,其特征在于,包括:
获取功能请求信息,识别所述功能请求信息针对的API数据,并根据所述API数据确定目标API;
基于所述目标API的历史调用信息判断所述目标API是否为非公开API;
若所述目标API不为非公开API,则基于所述功能请求信息调用所述目标API;
若所述目标API为非公开API,则获取所述目标API的豁免条件,并基于所述豁免条件对所述目标API进行设置,将设置豁免条件后的目标API暴露在java层中,通过元反射方法调用设置豁免条件后的目标API,以完成所述目标API的调用,所述元反射方法通过反射获取。
2.如权利要求1所述的安卓系统内非公开API的调用方法,其特征在于,所述识别所述请求信息针对的API数据,并根据所述API数据确定目标API的步骤,包括:
获取历史数据,所述历史数据包括:历史请求信息和所述历史请求信息对应的历史API数据;
匹配所述历史请求信息与所述功能请求信息,得到所述历史请求信息中与所述功能请求信息类型一致的目标功能请求信息;
根据所述目标功能请求信息确定初始API数据,所述初始API数据包括所述目标功能请求信息对应的所有API的标识信息及所有API的个数;
选择所述目标功能请求信息对应的所有API的个数最少的初始API数据作为目标历史API数据;
基于所述目标历史API数据确定所述目标API。
3.如权利要求2所述的安卓系统内非公开API的调用方法,其特征在于,所述基于所述目标API的历史调用信息判断所述目标API是否为非公开API的步骤,包括:
获取所述目标API的历史调用信息;
解析所述历史调用信息,得到解析数据,若所述解析数据中含有目标注解,则判断所述目标API为非公开API;
若所述解析数据中不含有目标注解,则判断所述目标API不为非公开API。
4.如权利要求1所述的安卓系统内非公开API的调用方法,其特征在于,所述通过反射获取元反射方法的步骤,包括:
将通过类反射API获取目标方法作为元反射方法,所述目标方法为获取类自身声明的所有方法;
将通过反射所述元反射方法再次调用所述目标方法作为通过反射获取元反射方法。
5.如权利要求1所述的安卓系统内非公开API的调用方法,其特征在于,所述基于所述豁免条件对所述目标API进行设置的步骤,包括:
通过修改运行标志的方式修改所述目标API的目标语句,所述目标语句为非公开API的豁免语句;
通过修改后的目标语句为所述目标API设置豁免条件。
6.如权利要求1所述的安卓系统内非公开API的调用方法,其特征在于,所述基于所述豁免条件对所述目标API进行设置的步骤,还包括:
修改调用所述目标API的目标函数中的目标参数语句;
通过修改后的目标参数语句为所述目标API设置豁免条件。
7.如权利要求1所述的安卓系统内非公开API的调用方法,其特征在于,所述将设置豁免条件后的目标API暴露在java层中的步骤,包括:
采用预设方法将所述目标API暴露在java层中,以使所述目标API能够被所述元反射方法调用。
8.一种安卓系统内非公开API的调用装置,其特征在于,所述装置包括:
请求接收模块,用于获取功能请求信息,识别所述所述功能请求信息针对的API数据,并根据所述API数据确定目标API;
判断模块,用于基于所述目标API的历史调用信息判断所述目标API是否为非公开API;
调用模块,用于若所述目标API不为非公开API,则基于所述功能请求信息调用所述目标API;
所述调用模块,还用于若所述目标API为非公开API,则获取所述目标API的豁免条件,并基于所述豁免条件对所述目标API进行设置,将设置豁免条件后的目标API暴露在java层中,通过所述元反射方法调用设置豁免条件后的目标API,以完成所述目标API的调用,所述元反射方法通过反射获取。
9.一种电子设备,其特征在于,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过所述总线通信,所述机器可读指令被所述处理器执行时执行如权利要求1至7中任一项所述的安卓系统内非公开API的调用方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行如权利要求1至7中任一项所述的安卓系统内非公开API的调用方法的步骤。
CN202310654321.2A 2023-06-02 2023-06-02 安卓系统内非公开api的调用方法、装置、设备及介质 Pending CN116701017A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310654321.2A CN116701017A (zh) 2023-06-02 2023-06-02 安卓系统内非公开api的调用方法、装置、设备及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310654321.2A CN116701017A (zh) 2023-06-02 2023-06-02 安卓系统内非公开api的调用方法、装置、设备及介质

Publications (1)

Publication Number Publication Date
CN116701017A true CN116701017A (zh) 2023-09-05

Family

ID=87827054

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310654321.2A Pending CN116701017A (zh) 2023-06-02 2023-06-02 安卓系统内非公开api的调用方法、装置、设备及介质

Country Status (1)

Country Link
CN (1) CN116701017A (zh)

Similar Documents

Publication Publication Date Title
US11663110B2 (en) Analysis to check web API code usage and specification
US10942708B2 (en) Generating web API specification from online documentation
US8122292B2 (en) Debugging of business flows deployed in production servers
US10360082B2 (en) Analysis of application programming interface usage for improving a computer system
US11062022B1 (en) Container packaging device
US11650905B2 (en) Testing source code changes
KR20160061305A (ko) 커스터마이징된 소프트웨어 개발 키트(sdk) 생성을 위한 방법 및 장치
US11048885B2 (en) Cognitive translation service integrated with context-sensitive derivations for determining program-integrated information relationships
CN109062563B (zh) 用于生成页面的方法和装置
CN110764748B (zh) 代码调用方法、装置、终端及存储介质
US20180365219A1 (en) Determining context using weighted parsing scoring
CN112328301B (zh) 维护运行环境一致性的方法、装置、存储介质及电子设备
US20200326990A1 (en) Dynamic Infrastructure Management and Processing
CN115982491A (zh) 页面更新方法及装置、电子设备和计算机可读存储介质
US10268779B2 (en) Sharing server conversational context between multiple cognitive engines
US20200410106A1 (en) Optimizing Operating System Vulnerability Analysis
US12001458B2 (en) Multi-cloud object store access
CN116701017A (zh) 安卓系统内非公开api的调用方法、装置、设备及介质
CN111400623B (zh) 用于搜索信息的方法和装置
US10902046B2 (en) Breaking down a high-level business problem statement in a natural language and generating a solution from a catalog of assets
CN108089852B (zh) 建立属性访问的方法、介质、装置和计算设备
US20220283789A1 (en) Methods and apparatuses for providing a function as a service platform
CN112068814A (zh) 可执行文件的生成方法、装置、系统及介质
CN117111904B (zh) 用于将Web应用自动转换成无服务器函数的方法和系统
CN117118962B (zh) 用于跨多个云平台部署用户方法的方法和系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination