CN103440337B - Api兼容性扫描方法和api兼容性扫描装置 - Google Patents
Api兼容性扫描方法和api兼容性扫描装置 Download PDFInfo
- Publication number
- CN103440337B CN103440337B CN201310404766.1A CN201310404766A CN103440337B CN 103440337 B CN103440337 B CN 103440337B CN 201310404766 A CN201310404766 A CN 201310404766A CN 103440337 B CN103440337 B CN 103440337B
- Authority
- CN
- China
- Prior art keywords
- api
- compatibility
- version
- application program
- hidden
- 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
- Stored Programmes (AREA)
Abstract
提供了一种API兼容性扫描方法和API兼容性扫描装置。API兼容性扫描方法包括:获取操作***的API的版本兼容性规则,并建立包括API的引入版本信息和废弃版本信息的***API兼容性规则库;针对将被检查API兼容性的应用程序,获取应用程序的代码语法树;解析代码语法树以获取应用程序所使用的API;基于API兼容性规则库中与获取的API对应的废弃版本信息来确定应用程序的API的兼容性隐患。
Description
技术领域
本发明涉及操作***领域,更具体地,涉及一种针对操作***中的应用程序的应用程序接口(API)兼容性扫描方法和API兼容性扫描装置。
背景技术
随着诸如Google的Android操作***、苹果公司的iOS操作***的***版本越来越多,操作***的应用程序接口(API)的版本兼容性问题越来越突出。例如,当某API要求运行在iOS操作***的5.0版本以上,而某个应用程序(APP)使用这个API运行在iOS操作***的4.3版本时,如果不判断***的版本则有可能导致APP崩溃或功能异常。又例如,如果某***API在Android 4.0以上版本已废弃,而开发者调用该API时忘记增加版本判断,则该APP对4.0以上版本的Android操作***的适配就存在隐患。
因此,需要提供一种能够自动扫描出APP的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被调用的次数以及在代码中的位置的信息。
附图说明
通过下面结合附图进行的描述,本发明的上述和其他目的和特点将会变得更加清楚,其中:
图1是示出根据本发明实施例的用于应用程序(APP)的应用程序接口(API)兼容性扫描方法的流程图;
图2是示出根据本发明实施例的用于扫描应用程序(APP)的API兼容性的装置的示图。
具体实施方式
下面提供参照附图进行的描述以有助于全面理解如权利要求及其等同物所限定的本发明的示例性实施例。所述描述包括各种详细的细节以有助于理解,而这些描述将被认为仅为示例性的。因此,本领域的普通技术人员将意识到在不脱离本发明的范围和精神的情况下可做出在此描述的各种改变和变型。另外,为了清晰和简洁,可省略对公知功能和构造的描述。
图1示出的是根据本发明实施例的用于应用程序(APP)的应用程序接口(API)兼容性扫描方法的流程图。
如图1所示,首先,在步骤S101,获取操作***的所有API的版本兼容性规则,并建立***API兼容性规则库。具体地,以iOS操作***或Android操作***为例,可以从iOS操作***的官方网站或Android操作***的官方网站自动获取iOS操作***的API或Android操作***的API的版本兼容性规则。API的版本兼容性规则包含操作***的API的软件开发工具包(SDK)的引入版本信息和废弃版本信息。例如,Android官网给出的某API“android.service/textservice”的引入***版本信息为:Added in API level 14,这说明该API仅兼容Android os14以上版本。
通过获取所有的API的版本兼容性规则,可建立起API兼容性规则库,其基本结构如下:
***OS | ***API | 引入版本 | 废弃版本 | 备注 |
Android | android.service/textservice | 14 | Null | Null |
... | ... | ... | ... | ... |
如以上的表所示,API兼容性规则库包括***OS字段、***API字段、引入版本字段、废弃版本字段和备注字段。***OS字段用于表示操作***的名称、***API字段用于表示API的名称,引入版本字段用于表示API被引入的版本,废弃版本字段表示API被废弃的版本。如果废弃版本字段的值为空(Null),则表示该API在最新的版本的操作***中仍然被使用。如果废弃版本字段的值不为空而具有特定的值,则表示在该值所指定的版本中该API已经被放弃,也就是说,在最新的版本的操作***中该API已经不再被使用。
可按照预定周期自动地执行步骤S101以获取最新的API兼容性信息,或者可手动地设置S101的执行时间。
接下来,在步骤S103,针对将被检查API兼容性的APP工程,获取APP工程的代码语法树。例如,对于iOS操作***,可以基于clang编译器的libtooling库,以Vistor模式访问APP的源码文件语法树中的节点。对于Android操作***,可基于JDT编译插件获取APP的代码语法树。
然后,可选择地,在步骤S105,可对在步骤S103获取的APP工程的代码语法树进行遍历,以获得精简的代码语法树。通过步骤S105,可以去除原始的代码语法树中的重复和无用的信息,从而可以提高API抓取的效率。
以iOS操作***为例,LibTooling工具提供一个通用的访问语法树的方式:RecursiveASTVisitor。通过继承这个类并实现相应的Visit方法,即可访问需要的语法树节点。下面给出遍历代码语法树的伪代码的示例:
1、创建一个工厂对象,注册到libtooling工具中
2、创建一个继承自ASTConsumer的子类GodEyesASTConsumer,并且实现一个HandleTranslationUnit方法,这样每一次访问到一个源码文件都会回调这个方法。在这里调用Visitor的traverse方法即可遍历所有语法树节点。
接下来,在步骤S107,解析代码语法树以抓取APP工程所使用的全部API。
然后,在步骤S109,基于API兼容性规则库来确定抓取的APP工程的API的兼容性隐患。具体地,如果抓取的API在API兼容性规则库中对应的废弃版本字段显示为Null,则确定该API不存在兼容性隐患。否则,如果抓取的API的对应的废弃版本字段不是Null,则确定该API存在兼容性隐患。
另外,根据优选实施例,如果在APP的代码语法树中存在版本判断代码,则可不执行步骤S109。这是因为APP的开发者已经意识到了APP的API兼容性问题而加入了版本判断的代码以消除兼容性问题,所以本发明可以不用再次执行步骤S109来确定API的兼容性。
下面给出检查是否包括判断版本的代码的伪代码的示例:
另外,根据本发明的实施例,在步骤S111,还可基于APP工程中设置的***最低支持版本来确定该API是否存在兼容性隐患。具体地,如果APP工程的某一API的引入版本高于该APP工程支持的最低版本,则该API存在兼容性隐患。通过将API兼容性规则库中相应的API的引入版本与APP工程设置的最低兼容版本进行比较,确定是否存在兼容性隐患。例如,可根据以下的伪代码来进行查找:
最后,在步骤S113,根据在步骤S109和S111中得到的至少一个兼容性隐患结果,生成最终的兼容性隐患报告。下面给出最终的兼容性隐患报告的格式。
***API | 存在兼容性隐患的调用次数 | 存在兼容性隐患的代码位置 |
XXX | Y次 | ZZZ.java,150、200行 |
ABB | N次 | ZZZ.java,160、300行 |
... | ... | .. |
下面将参照图2来说明根据本发明实施例的用于扫描API兼容性隐患的装置200。
如图2所示,根据本发明实施例的用于扫描API兼容性隐患的装置200包括API兼容性规则库单元210、代码语法树获取单元220、代码语法树遍历单元230、API抓取单元240、API兼容性确定单元250和兼容性报告生成单元260。
API兼容性规则库单元210获取操作***的所有API的版本兼容性规则,并建立***API兼容性规则库。具体地,以iOS操作***或Android操作***为例,API兼容性规则库单元210可以从iOS操作***的官方网站或Android操作***的官方网站自动获取iOS操作***的API或Android操作***的API的版本兼容性规则。API兼容性规则库单元210可按照预定周期自动地从官网上获取最新的API兼容性规则信息,或者可根据用户的设置来手动地获取API兼容性规则。
代码语法树获取单元220针对将被检查API兼容性的APP工程,获取APP工程的代码语法树。例如,对于iOS操作***,代码语法树获取单元220可以基于clang编译器的libtooling库,以Vistor模式访问APP的源码文件语法树中的节点。对于Android操作***,代码语法树获取单元220可基于JDT编译插件获取APP的代码语法树。
可选择地,代码语法树遍历单元230可对代码语法树获取单元220获取的APP工程的代码语法树进行遍历,以获得精简的代码语法树。以iOS操作***为例,LibTooling工具提供一个通用的访问语法树的方式:RecursiveASTVisitor。通过继承这个类并实现相应的Visit方法,即可访问需要的语法树节点。
API抓取单元240解析代码语法树以抓取APP工程所使用的全部API。
API兼容性确定单元250基于API兼容性规则库来确定抓取的APP工程的API的兼容性隐患。具体地,API兼容性确定单元250在兼容性规则库中找到与抓取的API对应的条目,并基于该条目中的废弃版本字段的值来确定是否存在兼容性隐患。如果抓取的API在API兼容性规则库中对应的废弃版本字段显示为Null,则API兼容性确定单元250确定该API不存在兼容性隐患。否则,如果抓取的API的对应的废弃版本字段不是Null,则API兼容性确定单元250确定该API存在兼容性隐患。
特别地,如果API兼容性确定单元250确定在APP的代码语法树中存在版本判断代码,则不执行基于废弃版本字段来确定是否兼容性隐患。
API兼容性确定单元250还可基于APP工程中设置的***最低支持版本来确定该APP工程的API是否存在兼容性隐患。具体地,如果APP工程的某一API的引入版本高于该APP工程支持的最低版本,则API兼容性确定单元250确定该API存在兼容性隐患。通过将API兼容性规则库中相应的API的引入版本与APP工程设置的最低兼容版本进行比较,API兼容性确定单元250可确定该API是否存在兼容性隐患。
兼容性报告生成单元260根据API兼容性确定单元250得到的兼容性隐患结果,生成最终的兼容性隐患报告。
应理解,以上的装置的部件可以进一步划分为更多的部件或者合并为较少的部件。
根据本发明的API兼容性扫描方法和装置对于一般Android或iOS操作***的APP代码工程,可以在5~10分钟内自动扫描出全部由***API调用不当导致的兼容性隐患,输出兼容性扫描报告,实现了现有的代码静态扫描工具不具备的API兼容性扫描功能。
根据本发明的方法可被记录在包括执行由计算机实现的各种操作的程序指令的计算机可读介质中。介质也可以只包括程序指令或者包括与程序指令相结合的数据文件、数据结构等。计算机可读介质的例子包括磁介质(例如硬盘、软盘和磁带);光学介质(例如CD-ROM和DVD);磁光介质(例如,光盘);以及特别配制用于存储并执行程序指令的硬件装置(例如,只读存储器(ROM)、随机存取存储器(RAM)、闪存等)。介质也可以是包括传输规定程序指令、数据结构等的信号的载波的传输介质(例如光学线或金属线、波导等)。程序指令的例子包括例如由编译器产生的机器码和包含可使用解释器由计算机执行的高级代码的文件。
尽管已经参照本发明的示例性实施例具体显示和描述了本发明,但是本领域的技术人员应该理解,在不脱离由权利要求限定的本发明的精神和范围的情况下,可以对其进行形式和细节上的各种改变。
Claims (12)
1.一种用于应用程序的API兼容性扫描方法,包括:
从操作***的官方网站获取操作***的API的版本兼容性规则,并建立包括API的引入版本信息和废弃版本信息的***API兼容性规则库;
针对将被检查API兼容性的应用程序,获取应用程序的代码语法树;
解析代码语法树以获取应用程序所使用的API;
基于API兼容性规则库中与获取的API对应的废弃版本信息来确定应用程序的API的兼容性隐患。
2.如权利要求1所述的API兼容性扫描方法,其中,如果在应用程序的代码语法树中存在版本判断代码,则不执行确定API的兼容性隐患的步骤。
3.如权利要求1所述的API兼容性扫描方法,其中,自动从操作***的官方网站获取最新的API的版本兼容性规则,或者手动获取API的版本兼容性规则。
4.如权利要求1所述的API兼容性扫描方法,还包括:在解析代码语法树之前对代码语法树进行遍历以得到精简的代码语法树。
5.如权利要求1所述的API兼容性扫描方法,还包括:基于API兼容性规则库中与获取的API对应的引入版本信息和应用程序的最低支持版本来确定应用程序的API的兼容性隐患。
6.如权利要求1-5中的任意一个所述的API兼容性扫描方法,还包括:基于确定的API的兼容性隐患生成兼容性隐患报告,兼容性隐患报告包括关于存在兼容性隐患的API被调用的次数以及在代码中的位置的信息。
7.一种用于扫描应用程序的API兼容性的API兼容性扫描装置,包括:
API兼容性规则库单元,从操作***的官方网站获取操作***的API的版本兼容性规则,并建立包括API的引入版本信息和废弃版本信息的***API兼容性规则库;
代码语法树获取单元,用于针对将被检查API兼容性的应用程序,获取应用程序的代码语法树;
API抓取单元,用于解析代码语法树以获取应用程序所使用的API;
API兼容性确定单元,用于基于API兼容性规则库中与获取的API对应的废弃版本信息来确定应用程序的API的兼容性隐患。
8.如权利要求7所述的API兼容性扫描装置,其中,如果API兼容性确定单元确定在应用程序的代码语法树中存在版本判断代码,则不执行确定API的兼容性隐患的操作。
9.如权利要求7所述的API兼容性扫描装置,其中,API兼容性规则库单元自动从操作***的官方网站获取最新的API的版本兼容性规则,或者根据用户的设置来手动地获取API的版本兼容性规则。
10.如权利要求7所述的API兼容性扫描装置,还包括:代码语法树遍历单元,用于在API抓取单元解析代码语法树之前对代码语法树进行遍历以得到精简的代码语法树。
11.如权利要求7所述的API兼容性扫描装置,API兼容性确定单元还基于API兼容性规则库中与获取的API对应的引入版本信息和应用程序的最低支持版本来确定应用程序的API的兼容性隐患。
12.如权利要求7-11中的任意一个所述的API兼容性扫描装置,还包括:兼容性报告生成单元,基于确定的API的兼容性隐患生成兼容性隐患报告,兼容性隐患报告包括关于存在兼容性隐患的API被调用的次数以及在代码中的位置的信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310404766.1A CN103440337B (zh) | 2013-09-09 | 2013-09-09 | Api兼容性扫描方法和api兼容性扫描装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310404766.1A CN103440337B (zh) | 2013-09-09 | 2013-09-09 | Api兼容性扫描方法和api兼容性扫描装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103440337A CN103440337A (zh) | 2013-12-11 |
CN103440337B true CN103440337B (zh) | 2017-01-11 |
Family
ID=49694030
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310404766.1A Active CN103440337B (zh) | 2013-09-09 | 2013-09-09 | Api兼容性扫描方法和api兼容性扫描装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103440337B (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104932973B (zh) * | 2014-03-21 | 2019-03-15 | 腾讯科技(深圳)有限公司 | 一种版本兼容测试方法和装置 |
US10277462B1 (en) | 2015-08-25 | 2019-04-30 | Amdocs Development Limited | System, method, and computer program for maintaining versioning of web services associated with a plurality of independent sub-organizations |
CN106897071A (zh) * | 2017-02-28 | 2017-06-27 | 郑州云海信息技术有限公司 | 一种api提取方法及*** |
CN108628615B (zh) * | 2018-03-22 | 2022-03-04 | 创新先进技术有限公司 | 一种废弃代码检测方法、装置以及设备 |
CN108563578B (zh) * | 2018-04-20 | 2021-09-21 | 平安科技(深圳)有限公司 | Sdk兼容性检测方法、装置、设备及可读存储介质 |
CN108595280B (zh) * | 2018-04-25 | 2021-02-19 | 金蝶软件(中国)有限公司 | 接口适配方法、装置、计算机设备和存储介质 |
CN108920370B (zh) * | 2018-07-02 | 2022-08-16 | 北京百度网讯科技有限公司 | 兼容性问题检测方法、装置及设备 |
CN109525677A (zh) * | 2018-12-20 | 2019-03-26 | 杭州数梦工场科技有限公司 | 处理数据的方法及装置 |
CN110688300A (zh) * | 2019-08-13 | 2020-01-14 | 平安科技(深圳)有限公司 | 兼容性测试方法、装置、设备及存储介质 |
CN110704669A (zh) * | 2019-10-16 | 2020-01-17 | 紫光云技术有限公司 | 一种分辨率兼容性测试图像分析方法 |
CN111159045B (zh) * | 2019-12-31 | 2024-04-19 | 中国银行股份有限公司 | 一种兼容性问题检测方法、装置及存储介质 |
CN111352631B (zh) * | 2020-02-21 | 2024-03-19 | 腾讯音乐娱乐科技(深圳)有限公司 | 一种接口兼容性检测方法及装置 |
CN112764797B (zh) * | 2021-01-06 | 2023-03-21 | 浙江大华技术股份有限公司 | 软件兼容性检测方法、装置、电子装置和存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6591417B1 (en) * | 1999-12-30 | 2003-07-08 | International Business Machines Corporation | Method of and system for testing compatibility with an external API upgrade |
EP1669858A2 (en) * | 2004-02-20 | 2006-06-14 | Microsoft Corporation | Method and system for providing a common operating system |
CN102103537A (zh) * | 2009-12-17 | 2011-06-22 | 珠海市君天电子科技有限公司 | 一种发现安全软件之间兼容性问题的方法和装置 |
CN102567015A (zh) * | 2010-12-31 | 2012-07-11 | 国际商业机器公司 | 用于执行动态软件版本选择的方法和*** |
-
2013
- 2013-09-09 CN CN201310404766.1A patent/CN103440337B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6591417B1 (en) * | 1999-12-30 | 2003-07-08 | International Business Machines Corporation | Method of and system for testing compatibility with an external API upgrade |
EP1669858A2 (en) * | 2004-02-20 | 2006-06-14 | Microsoft Corporation | Method and system for providing a common operating system |
CN102103537A (zh) * | 2009-12-17 | 2011-06-22 | 珠海市君天电子科技有限公司 | 一种发现安全软件之间兼容性问题的方法和装置 |
CN102567015A (zh) * | 2010-12-31 | 2012-07-11 | 国际商业机器公司 | 用于执行动态软件版本选择的方法和*** |
Also Published As
Publication number | Publication date |
---|---|
CN103440337A (zh) | 2013-12-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103440337B (zh) | Api兼容性扫描方法和api兼容性扫描装置 | |
US11307961B2 (en) | Techniques for traversing representations of source code | |
US10067957B1 (en) | Process for serializing and deserializing data described by a schema | |
CN106951228B (zh) | 版本迭代中差异的处理方法和装置 | |
US10481964B2 (en) | Monitoring activity of software development kits using stack trace analysis | |
US20160092350A1 (en) | Callpath finder | |
CN108139891B (zh) | 用于生成建议以纠正未定义标记错误的方法和*** | |
EP2827244A1 (en) | Extension mechanism for scripting language compiler | |
US8484630B2 (en) | Code motion based on live ranges in an optimizing compiler | |
CN111124480B (zh) | 应用程序包的生成方法、装置、电子设备及存储介质 | |
CN106547520B (zh) | 一种代码路径分析方法及装置 | |
AU2019200748B2 (en) | Immutable object types | |
CN107341106B (zh) | 应用程序兼容性检测方法、开发终端及存储介质 | |
US20140096117A1 (en) | Data dependence analysis support device, data dependence analysis support program, and data dependence analysis support method | |
CN117113347A (zh) | 一种大规模代码数据特征提取方法及*** | |
CN109446078B (zh) | 代码测试方法及装置、存储介质、电子设备 | |
CN113778897B (zh) | 接口的自动测试方法、装置、设备及存储介质 | |
CN110209983B (zh) | 一种网页web项目的部署方法及装置 | |
JP2021002326A (ja) | ソフトウェアプログラムにおける静的分析違反の修復パターンの精緻化 | |
CN111443920B (zh) | 一种框架迁移方法及装置 | |
CN113031963A (zh) | 条件编译的实现方法、装置、设备及存储介质 | |
CN116628027A (zh) | 跨数据库查询方法、装置、设备、介质和计算机程序产品 | |
CN106951236B (zh) | 插件的开发方法及装置 | |
JP2012128584A (ja) | ポインタを解析する方法、並びにそのコンピュータ及びコンピュータ・プログラム | |
CN115129598A (zh) | 一种sql语句的风险检测方法、装置、***及介质 |
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 |