CN111352631A - 一种接口兼容性检测方法及装置 - Google Patents
一种接口兼容性检测方法及装置 Download PDFInfo
- Publication number
- CN111352631A CN111352631A CN202010107627.2A CN202010107627A CN111352631A CN 111352631 A CN111352631 A CN 111352631A CN 202010107627 A CN202010107627 A CN 202010107627A CN 111352631 A CN111352631 A CN 111352631A
- Authority
- CN
- China
- Prior art keywords
- class
- file
- class file
- files
- name
- 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.)
- Granted
Links
- 238000001514 detection method Methods 0.000 title claims description 37
- 238000000034 method Methods 0.000 claims abstract description 303
- 238000004590 computer program Methods 0.000 claims description 9
- 238000010586 diagram Methods 0.000 description 8
- 238000004891 communication Methods 0.000 description 5
- 238000011161 development Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 238000012856 packing Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/436—Semantic checking
- G06F8/437—Type checking
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Stored Programmes (AREA)
Abstract
本申请实施例公开了一种接口兼容性检测方法,包括:确定所述一个或多个目标类文件中每一个目标类文件所引用的类文件名;在所述一个或多个目标类文件中,查找所述每一个目标类文件引用的类文件名所对应的第一类文件;若在所述一个或多个目标类文件中查找所述第一类文件失败,记录并反馈所述类文件名和引用所述类文件名的第二类文件,所述第一类文件为所述一个或多个目标类文件中的一个或多个。通过实施本申请实施例,可以把兼容性问题提前暴露在编译期供开发者解决而避免被动地等待出现线上异常的问题,提高应用程序的稳定性。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种接口兼容性检测方法及装置。
背景技术
在安卓开发过程中,主工程会通过引用安卓Android库项目的二进制归档(即Android Archive Library,AAR)文件来调用其他模块或者第三方类库,以拓展自身功能。当主工程中引用的AAR文件数量逐渐变多后,可能会出现同一个AAR被指定的版本号存在多个的问题。例如,假设有两个AAR(分别为A文件和B文件),其中,B文件的1.0.0版本依赖了A文件的1.0.0版本;B文件调用了来自A文件中类M的某一个方法。代码编写人员在工程中声明引用了B文件的1.0.0版本和A文件的2.0.0版本。触发工程编译时,插件(如Gradle)负责解析所有AAR的直接依赖以及传递依赖,解析后工程中A文件的版本号包括由B文件传递依赖而来的A文件1.0.0以及工程中指定的A文件2.0.0。
针对同一个AAR文件版本号存在多个调用的问题,一般会自动使用解析到的最高版本,例如使用A文件的2.0.0版本以及B文件的1.0.0版本参与工程打包。但是,在此场景下若A文件的2.0.0版本中不存在类M的foo()方法,则B文件1.0.0版本中对应调用该方法的代码处与A文件内部的实现就出现了接口不兼容的情况,可能导致应用程序闪退。由于AAR中的代码已经是class文件,该接口不兼容问题在原生编译过程中,由于不会出现编译报错问题而无法被发现的。如果AAR之间的接口调用存在接口不兼容问题,而在Android原生的编译过程中而在编译过程也没有发现问题的话,那么一旦应用程序运行到接口不兼容处的代码,最终就会出现运行时错误导致应用闪退,降低应用程序稳定性,影响线上用户体验。
因此,如何提前检测接口的兼容性,提高应用程序的稳定性,是亟待解决的问题。
发明内容
本申请实施例提供了一种接口兼容性检测方法及装置,旨在提前检测接口的兼容性,提高应用程序的稳定性。
第一方面,本申请实施例提供了一种接口兼容性检测方法,该方法包括:
根据主工程以及所述主工程引用的文件,确定一个或多个目标类文件;
确定所述一个或多个目标类文件中每一个目标类文件所引用的类文件名;
在所述一个或多个目标类文件中,查找每一个所述目标类文件引用的类文件名所对应的第一类文件;
若在所述一个或多个目标类文件中查找所述第一类文件失败,记录并反馈所述类文件名和引用所述类文件名的第二类文件。
本申请实施例中,编译主工程以及主工程所引用的库文件得到对应的类文件(即class文件)。对每一个类文件中所引用的类文件名进行确定,并根据确定的类文件名在得到多个目标类文件中查找是否存在对应的类文件。遍历所有类文件,重复以上的查找操作。如果根据某一个类文件引用的类文件名,在一个或多个类文件中查找失败的话,就将该某一个类文件以及其引用的类文件名记录并反馈。通过实施本申请实施例,在工程编译期间自动化地检测并报告AAR接口调用的兼容性问题。可以把兼容性问题提前暴露在编译期供开发者解决而避免被动地等待出现线上异常的问题,提高应用程序的稳定性。
在一种可能的实现方式中,所述主工程引用的文件为压缩文件;所述一个或多个目标类文件包括所述主工程对应的类文件和所述引用的文件对应的类文件;所述根据主工程以及所述主工程引用的文件,确定一个或多个目标类文件,包括:通过编译所述主工程,得到所述主工程对应的类文件;下载所述主工程引用的文件,通过解压所述引用的文件,得到所述引用的文件对应的类文件。
在一种可能的实现方式中,所述根据主工程以及所述主工程引用的文件,确定一个或多个目标类文件,包括:通过编译所述主工程,得到所述主工程对应的类文件;下载所述主工程引用的文件,所述主工程引用的文件为压缩文件;通过解压所述引用的文件,得到所述引用的文件对应的类文件;将所述主工程对应的类文件和所述引用的文件对应的类文件确定为所述目标类文件。
在一种可能的实现方式中,所述确定所述一个或多个目标类文件中每一个目标类文件所引用的类文件名,包括:解析每一个所述目标类文件的文件结构,并将所述文件结构保存到所述目标类文件对应的目标对象,所述文件结构包括所述目标类文件所引用的一个或多个类文件名;根据每一个所述类文件对应的目标对象中的类文件名,确定每一个所述类文件所引用的一个或多个类文件名。
在一种可能的实现方式中,所述方法还包括:若在所述一个或多个目标类文件中查找所述第一类文件成功,获取所述第一类文件中引用的一个或多个方法;确定每一个所述方法的相关信息,所述相关信息包括所属类文件名、包含的方法信息以及包含的字段信息中的一种或多种。
在一种可能的实现方式中,若方法的相关信息包括所属类文件名,则所述接口兼容性检测方法还包括:在所述一个或多个目标类文件中,查找与某一方法的所属类文件名对应的第三类文件;若查找所述第三类文件失败,记录并反馈所述某一方法的所属类文件名和所述某一方法所归属的第三类文件。
在一种可能的实现方式中,若方法的相关信息包括:包含的方法信息,且所述方法信息包括方法名和方法签名,则所述接口兼容性检测方法还包括:在所述一个或多个目标类文件中,查找与某一方法中的方法名和方法签名对应的方法;若查找所述对应的方法失败,记录并反馈所述某一方法所归属的第一类文件、引用所述某一方法的表达式的所在行、所述某一方法的方法名和所述某一方法的方法签名。
在一种可能的实现方式中,若方法的相关信息包括:包含的字段信息,且所述字段信息包括字段名和字段描述符,则接口兼容性检测方法还包括:在所述一个或多个目标类文件中,查找与某一方法中的字段名和字段描述符对应的字段;若查找所述对应的字段失败,记录并反馈所述某一方法所归属的第一类文件、引用所述字段信息的表达式的所在行、所述某一方法的字段名和所述某一方法的字段描述符。
第二方面,本申请实施例提供了一种接口兼容性检测装置,该装置包括:
第一确定单元,用于根据主工程以及所述主工程引用的文件,确定一个或多个目标类文件;
第二确定单元,用于确定所述一个或多个目标类文件中每一个目标类文件所引用的类文件名;
第一查找单元,用于在所述一个或多个目标类文件中,查找每一个所述目标类文件引用的类文件名所对应的第一类文件;
反馈单元,用于若在所述一个或多个目标类文件中查找所述第一类文件失败,记录并反馈所述类文件名和引用所述类文件名的第二类文件。
在一种可能的实现方式中,所述主工程引用的文件为压缩文件;所述一个或多个目标类文件包括所述主工程对应的类文件和所述引用的文件对应的类文件;
所述第一确定单元,具体用于:通过编译所述主工程,得到所述主工程对应的类文件;下载所述主工程引用的文件,通过解压所述引用的文件,得到所述引用的文件对应的类文件;将所述主工程对应的类文件和所述引用的文件对应的类文件确定为所述目标类文件。
在一种可能的实现方式中,所述装置还包括解析单元,用于:
解析每一个所述目标类文件的文件结构,并将所述文件结构保存到所述目标类文件对应的目标对象,所述文件结构包括所述目标类文件所引用的一个或多个类文件名;根据每一个所述类文件对应的目标对象中的类文件名,确定每一个所述类文件所引用的一个或多个类文件名。
在一种可能的实现方式中,所述装置还包括第三确定单元,用于:若在所述一个或多个目标类文件中查找所述第一类文件成功,获取所述第一类文件中引用的一个或多个方法;确定每一个所述方法的相关信息,所述相关信息包括所属类文件名、包含的方法信息以及包含的字段信息中的一种或多种。
在一种可能的实现方式中,所述装置还包括第二查找单元,用于:
若方法的相关信息包括所属类文件名,在所述一个或多个目标类文件中,查找与某一方法的所属类文件名对应的第三类文件;若查找所述第三类文件失败,记录并反馈所述某一方法的所属类文件名和所述某一方法所归属的第三类文件。
在一种可能的实现方式中,所述装置还包括第三查找单元,用于:
在所述获取所述第一类文件中引用的一个或多个方法之后,确定所述一个或多个方法中每一个方法包含的方法信息;且所述方法信息包括方法名和方法签名,则所述接口兼容性检测方法还包括:在所述一个或多个目标类文件中,查找与某一方法中的方法名和方法签名对应的方法;若查找所述对应的方法失败,记录并反馈所述某一方法所归属的第一类文件、引用所述某一方法的表达式的所在行、所述某一方法的方法名和所述某一方法的方法签名。
在一种可能的实现方式中,所述装置还包括第四查找单元,用于:
在所述获取所述第一类文件中引用的一个或多个方法之后,确定所述每一个方法引用的字段信息,若方法的相关信息包括:包含的字段信息,且所述字段信息包括字段名和字段描述符,则接口兼容性检测方法还包括:在所述一个或多个目标类文件中,查找与某一方法中的字段名和字段描述符对应的字段;若查找所述对应的字段失败,记录并反馈所述某一方法所归属的第一类文件、引用所述字段信息的表达式的所在行、所述某一方法的字段名和所述某一方法的字段描述符。
第三方面,本申请实施例提供了一种终端设备,包括处理器、通信设备、存储器、输入装置和输出装置,所述处理器、通信设备、存储器、输入装置和输出装置相互连接,其中,所述存储器用于存储应用程序代码,所述处理器被配置用于调用所述应用程序代码,执行上述第一方面任一项所述的方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行上述第一方面任一项所述的方法。
第五方面,本申请实施例提供了一种计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行上述第一方面任一项所述的方法。
附图说明
下面将对本申请实施例中所需要使用的附图作介绍。
图1是本申请实施例提供的一种接口兼容性检测架构的示意图;
图2是本申请实施例提供的一种接口兼容性检测方法的流程示意图;
图3是本申请实施例提供的另一种接口兼容性检测方法的流程示意图;
图4是本申请实施例提供的一种接口兼容性检测的应用场景示意图;
图5是本申请实施例提供的一种接口兼容性检测装置的结构示意图;
图6是本申请实施例提供的一种终端设备的结构示意图。
具体实施方式
为了使本领域技术人员更好地理解本发明方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
以下分别进行详细说明。
首先,对本申请中的部分用语进行解释说明,以便于本领域技术人员理解。
(1)安卓(Android),是指基于Linux内核的开放源代码移动操作***,是目前主流的手机操作***之一;本申请实施例所指的Android开发指的是基于Android***的应用开发。
(2)安卓存档库(Android Archive Library,AAR),是指Android中源码、资源文件等的打包形式,为一种zip格式的压缩文件。AAR是一种Android库项目的二进制归档文件,包含如class以及res资源文件等所有资源。一种Android中第三方库的存在形式。主要包含第三方库的代码(class文件)和资源。
(3)Maven,是指一个依赖管理***,负责AAR的版本管理。由于通常搭建在远程服务器中,也可称为Maven服务器。
(4)插件化,是一种基于Android***的动态化技术,是指在用户已安装应用程序包(Android application package,APK)的基础上,无需再单独安装其他应用程序包,也不需要升级当前apk,即可动态加载执行某些代码(即插件)的技术。
(5)类(class),在面向对象编程中是一种面向对象计算机编程语言的构造,是创建对象的蓝图,描述了所创建的对象共同的属性和方法。类的更严格的定义是由某种特定的元数据所组成的内聚的包。它描述了一些对象的行为规则,而这些对象就被称为该类的实例。类有接口和结构。接口描述了如何通过方法与类及其实例互操作,而结构描述了一个实例中数据如何划分为多个属性。而class文件(类文件)是一组以8位字节为基础单位的二进制流。
(6)接口调用,是指不同的功能模块之间存在着相互调用关系,在Java中,每个类可以对外公开一些方法、字段等元素,其他类可以通过调用这些公开的元素,去调用其他模块的功能。
(7)java文件,为使用开发人员使用Java语言编写的一系列人类可读的计算机语言指令,通常是以.java后缀的文本文件形式存在。
下面对本申请实施例提供的一种接口兼容性检测的***架构进行描述。请参见图1,图1是本申请实施例提供的一种接口兼容性检测架构的示意图,包括主工程文件、检测插件(本申请实施例以gradle插件为例)和检测结果。其中,在主工程文件中应用插件,插件包含的程序可以运行本申请实施例提供的接口兼容性检测的方法;在编译期间可以自动检测并报告接口兼容性问题,提示开发人员对错误或者不兼容的代码进行修改和调整。
可以理解的是,图1所示的内容只是本申请实施例中的一种示例性的实施方式。本申请实施例中的***架构可以包括但不仅限于以上***架构。
下面是本申请中提供的接口兼容性检测方法的实施例,对本申请中提出的技术问题进行具体分析和解决。
请参见图2,图2是本申请实施例提供的一种接口兼容性检测方法流程的示意图,下面将结合图2从电脑的单侧(即存储主工程并运行插件对接口进行兼容性检测的终端)进行描述。该方法可以包括以下步骤S201-步骤S205,可选的步骤包括步骤S205。
步骤S201:根据主工程以及所述主工程引用的文件,确定一个或多个目标类文件。
具体地,解析与主工程引用相关的所有AAR文件,下载AAR文件并保存至本地(即前述的终端,本申请实施例以电脑为例)。确定所有AAR文件的路径,解压其中的class文件。编译主工程的java文件后得到的类文件和解压AAR文件得到的类文件,都作为目标类文件。
在一种可能的实现方式中,所述主工程引用的文件为压缩文件;所述一个或多个目标类文件包括所述主工程对应的类文件和所述引用的文件对应的类文件;所述根据主工程以及所述主工程引用的文件,确定一个或多个目标类文件,包括:通过编译所述主工程,得到所述主工程对应的类文件;下载所述主工程引用的文件,所述主工程引用的文件为压缩文件;通过解压所述引用的文件,得到所述引用的文件对应的类文件;将所述主工程对应的类文件和所述引用的文件对应的类文件确定为所述目标类文件。例如,首先编译主工程以及主工程引用的文件,得到主工程对应的类文件;可选地,引用的文件为压缩文件。将编译得到的多个类文件作为目标类文件。
步骤S202:确定所述一个或多个目标类文件中每一个目标类文件所引用的类文件名。
具体地,针对每一个目标类文件,将目标类文件中的引用的类文件名全部确定出来,即明确了每一个目标类文件与其他类文件的引用关系。根据每一个所述类文件对应的目标对象中的类文件名,确定所述一个或多个目标类文件中每一个目标类文件所引用的类文件名。
在一种可能的实现方式中,使用javassist工具来解析每一个class文件的字节码信息,以达到进一步的分析目的。可选地,可以使用ASM等其他工具或者形式来解析class文件的字节码信息。本申请实施例对解析class文件内字节码信息的方式不作限定。
步骤S203:在所述一个或多个目标类文件中,查找每一个所述目标类文件包含的类文件名所对应的第一类文件。
具体地,确定了每一个目标类文件中包含的类文件名(即目标类文件与其他类文件之间的引用关系)后;根据确定的类文件名在一个或多个类文件中查找对应的第一类文件;例如,其中一个目标类文件包含的类文件名为类a;查找出第一类文件是名称为a的类文件。
步骤S204:若在所述一个或多个目标类文件中查找所述第一类文件失败,记录并反馈所述类文件名和引用所述类文件名的第二类文件。
具体地,在前述步骤S203中查找与类文件名对应的第一类文件失败,就记录无法查找到的该类文件名以及引用该类文件名的第二类文件。其中,所述第一类文件为所述一个或多个目标类文件中的一个或多个。可以理解的是,查找所述第一类文件失败,指的是无法根据类文件名查找到对应的类文件。例如,其中一个目标类文件包含的类文件名为类a;查找类文件名称为a的第一类文件失败;那么记录类文件名a;并且,检索所有的目标类文件,筛选并记录所有引用第一类文件(即类文件名为a)的第二类文件。
步骤S205:若在所述一个或多个目标类文件中查找所述对应的第一类文件成功,获取所述第一类文件中引用的一个或多个方法。
具体地,在查找所述对应的第一类文件成功的前提下,接着在查找成功的第一类文件中确定第一类文件包含的一个或多个方法。例如,根据类文件的名称,查找到类文件A成功,确定类文件A中包含的方法;便于接下来对方法是否存在进行检测。
可选地,确定每一个所述方法的相关信息。具体地,在确定了类文件存在的情况下,将该类文件中包含的方法确定出来;之后再对方法所属的类,方法包含的方法名和方法签名以及字段名和字段描述符等信息中的一种或多种信息进行获取。对于获取的信息类型和数量不同,进一步验证相应方法、字段是否存在,所述相关信息包括所属类文件名、包含的方法信息以及包含的字段信息中的一种或多种。
在一种可能的实现方式中,所述获取所述第一类文件中引用的一个或多个方法之后,还包括:确定所述一个或多个方法中每一个方法的所属类文件名,其中,每一个方法所属的类文件名与包含一个或多个方法的第一类文件可能是同一个类文件或者不同类文件;在所述一个或多个目标类文件中,查找与某一方法的所属类文件名对应的第三类文件;若查找所述第三类文件失败,记录并反馈所述某一方法的所属类文件名和所述某一方法所归属的第三类文件。
例如,确定了第一类文件1之后,确定第一类文件1包含的方法foo()。确定foo()所属的类名(foo所属的类名不做限定,即第一类文件1中包含了方法foo,但是方法foo所属的类文件可以是类文件2或者类文件3等等),根据该方法所属的类名,通过特定查找方法(如ClassPool.get(classname))尝试获取该方法表达式所引用方法所在的类,如果该类不存在,将包含foo()的类文件、所调用方法的类名记录在特定列表(如incompatibleMethod)中。当完成所有的记录后,将列表信息反馈给开发者,便于开发者定位与解决问题,找到出现代码不兼容的接口。
在一种可能的实现方式中,所述获取所述第一类文件中引用的一个或多个方法之后,还包括:在所述一个或多个目标类文件中,查找与某一方法中的方法名和方法签名对应的方法;若查找所述对应的方法失败,记录并反馈所述某一方法所归属的第一类文件、引用所述某一方法的表达式的所在行、所述某一方法的方法名和所述某一方法的方法签名。若查找所述对应的方法失败,记录并反馈所述第一类文件、包含所述方法信息的表达式所在行、所述对应方法的所属类文件、所述对应方法的方法名和所述对应方法的方法签名。
需要说明的是,第一类文件可以引用了多个方法,每个方法中包含了方法信息;例如,第一类文件A引用方法B,在第一类文件A中存在方法B的名称和相关引用代码;在第一类文件A执行的过程中,通过方法B的名称调用对应的方法B。那么,通过方法B的名称在目标类文件中查找是否存在该方法B;如果查找不到方法B就执行相应的记录和反馈。
进一步可选地,在确定了第一类文件引用的方法所属的类名后,确定该方法包含的方法名和方法签名;根据方法名和方法签名尝试获取对应的方法。若查找不到所引用的方法,那么记录包含该方法的类文件、方法中相关的代码(即调用方法的表达式)所在行、查找失败的方法名和方法签名。
在一种可能的实现方式中,所述获取所述第一类文件中引用的一个或多个方法之后,还包括:在所述一个或多个目标类文件中,查找与某一方法中的字段名和字段描述符对应的字段;若查找所述对应的字段失败,记录并反馈所述某一方法所归属的第一类文件、引用所述字段信息的表达式的所在行、所述某一方法的字段名和所述某一方法的字段描述符。例如,方法B中通过字段C的名称来调用字段C,在方法B有相关代码或者表达式包含字段C的名称。那么,通过分析出的字段C的名称在目标类文件中查找字段C的相关内容,如果没有查找到字段C的相关内容就记录字段C的表达式所在第一类文件的代码行数、第一类文件名称以及字段所属的第一类文件等相关信息。
进一步可选地,在调用的方法类存在的前提下,检查其中方法设涉及的字段是否存在。根据字段名和字段描述符,尝试获取对应字段。若查找不到对应的字段,那么记录字段名、字段描述符、方法调用的类、调用字段的表达式所在行以及该表达式所在行的类文件(即第一类文件)。
请参见图3,图3是本申请实施例提供的另一种接口兼容性检测方法流程的示意图,下面将结合图3从电脑侧进行描述。该方法可以包括以下步骤S301-步骤S306,可选的步骤包括步骤S302和步骤S306。
步骤S301:根据主工程以及所述主工程引用的文件,确定一个或多个目标类文件。
具体地,请参见前述步骤S201。
步骤S302:解析所述每一个目标类文件的文件结构,并将所述文件结构保存到所述目标类文件对应的目标对象。
具体地,通过程序解析每一个所述目标类文件的文件结构,并将所述文件结构保存到所述目标类文件对应的目标对象。所述文件结构包括所述目标类文件所引用的一个或多个类文件名。例如,创建一个ClassPool对象(即目标对象池),遍历all-classes目录下的所有class文件目录,使用javassist工具解析目录下每一个class文件(即目标类文件)的内部结构,并将解析出来的每一个class文件的内部结构保存到一个CtClass对象(即目标对象)中;然后将所有CtClass对象保存到ClassPool。
步骤S303:确定所述一个或多个目标类文件中每一个目标类文件所引用的类文件名。
具体地,根据所述每一个类文件对应的目标对象中的类文件名,确定所述每一个类文件所引用的一个或多个类文件名。例如,从前述的ClassPool中获取到所有CtClass对象,保存到allClassList。遍历allClassList,每次取出一个CtClass对象,命名为currentClass。获得所有CtClass对象中引用的其他类文件的类名。详细描述请参见前述步骤S202。
步骤S304:在所述一个或多个目标类文件中,查找所述每一个所述目标类文件包含的类文件名所对应的第一类文件。
具体地,请参见前述步骤S203。
步骤S305:若在所述一个或多个目标类文件中查找所述第一类文件失败,记录并反馈所述类文件名和引用所述类文件名的第二类文件。
具体地,请参见前述步骤S204。
步骤S306:若在所述一个或多个目标类文件中查找所述对应的第一类文件成功,获取所述第一类文件中引用的一个或多个方法。
具体地,请参见前述步骤S205。
可选地,确定每一个所述方法的相关信息。具体地,每一个所述方法的相关信息可以包括每一个方法的所属类文件名、包含的方法信息以及字段信息中的一种或多种。
在一种可能的实现方式中,遍历代码中的每一行代码;若遇到方法对类的调用就检查方法所属类文件;若遇到代码表达式中对方法名和方法签名的调用则根据方法名和方法签名查找对应的方法是否存在;若遇到代码表达式中对字段名和字段描述符的调用,则根据字段名和字段描述符查找对应字段是否存在。
接下来对本申请提供的一种数据保护的应用场景进行描述。参阅图4,图4是本申请实施例提供的一种接口兼容性检测的应用场景示意图。接口兼容性检测的架构可以应用于如图4所示的场景中。如图4所示,为本申请实施例的整体实现原理。本申请实施例可以实现为一个Gradle插件“check-invoke”。开发者只需要在工程中应用本插件,就可以达到在编译期自动检测并报告接口兼容性问题的目的。具体实现流程如下:
1、在Gradle开始编译时,解析并下载所有AAR,待下载完成后,收集所有AAR文件的本地路径,解压获取到其中的classes.jar文件,再继续解压得到每一个AAR文件中的class文件。将得到的这些class文件存放在all-classes/<aar-name>目录下,其中,aar-name为AAR文件的名称。可以理解的是,每一个aar文件存放至对应的类文件目录下。
2、编译工程所有java文件后,得到一个class文件输出目录。将该目录下所有的class文件拷贝到all-classes/project-build目录下。
3、创建一个ClassPool对象,遍历all-classes目录下的所有class文件目录,使用javassist工具解析目录下每一个class文件的内部结构,并将解析出来的每一个class文件的内部结构保存到一个CtClass对象中;然后将所有CtClass对象保存到ClassPool中。
4、从3中的ClassPool中获取到所有CtClass对象,保存到allClassList中。
5、遍历allClassList,每次取出一个CtClass对象,命名为currentClass,执行以下步骤:
5.1检查当前类currentClass对于其他类的调用是否正确:
5.1.1调用CtClass.getRefClasse()方法,获取当前类所引用的其他类,保存到refClassList列表中,该列表每一项都是一个字符串形式的类名;
5.1.2若refClassList列表为空,则说明当前类未引用其他类,无需检查,跳过以下5.1.2.1步骤;若refClassList列表不为空,则遍历refClassList列表逐个获取所引用的其他类的类名className,执行5.1.2.1;
5.1.2.1根据className调用ClassPool.get(className)方法,尝试获取3中解析好的CtClass对象,若获取到的CtClass对象为空,则说明所引用的名为className的类不存在,将currentClass以及className,加入到incompatibleClass列表中;
5.2检查当前类currentClass内部的方法调用是否正确:
5.2.1通过CtClass.getDeclaredMethods()方法,获取当前类实现的所有方法,保存到列表methodList中;
5.2.2若methodList列表为空,说明当前类并未实现方法,不存在对于其他类的方法的调用,无需检查,跳过以下步骤5.2.2.1;若methodList列表不为空,则遍历methodList列表,使用javassist扫描每一个方法,执行5.2.2.1步骤;
5.2.2.1使用javassist扫描当前方法的整个方法体,当扫描到一个表达式(如方法调用、字段访问、对象创建)时,执行以下步骤:
5.2.2.1.1获取当前行表达式所调用的方法的类名、方法名+方法签名,字段名称+字段描述符三项信息;
5.2.2.1.2根据上一步骤获取的类名,使用ClassPool.get(className)方法,尝试获取步骤3中解析好的CtClass,若获取到的CtClass为空,则说明当前表达式所引用的方法所在的类不存在,将currentClass以及步骤5.2.2.1.1的类名,加入incompatibleClass列表中;
5.2.2.1.3若上一步骤获取到的CtClass对象不为空,说明所调用的方法所在类存在,需要继续检查方法是否存在。针对此CtClass对象调用getMethod(methodName,methodSign)方法,参数为5.2.2.1.1中方法名与方法签名,尝试获取对应方法。若返回为空,则说明当前表达式所引用的方法不存在,将currentClass以及当前表达式所在行数、调用的类、调用的方法名、方法签名等五项信息保存到incompatibleMethod列表中;
5.2.2.1.4若步骤5.2.2.1.2获取到的CtClass对象不为空,说明所调用的方法所在类存在,需要继续检查所调用的字段是否存在。针对此CtClass对象调用getField(fieldName,fieldDesc)方法,参数为5.2.2.1.1中字段名与字段描述符,尝试获取对应字段。若返回为空,则说明当前表达式所引用的字段不存在,将currentClass以及当前表达式所在行数、调用的类、调用的字段名称、字段描述符等五项信息保存到incompatibleField列表中;
6、在工程编译结束后,如果incompatibleClass、incompatibleMethod、incompatibleField三个列表中有任意一个不为空,说明当前工程存在接口不兼容情况,则抛出异常提示开发者,并输出这三个列表中信息,告知开发者具体不兼容的接口信息,方便定位与解决问题。
可以理解的是,图3所示只是本发明实施例中的一种示例性的实施方式,本发明实施例中的应用场景包括但不仅限于以上实施方式。
为了便于更好地实施本申请的上述方案,本申请实施例还对应提供了一种接口兼容性检测装置,请参见图5,图5是本申请实施例提供的一种接口兼容性检测装置的结构示意图;下面结合附图5来进行详细说明:
如图5所示,接口兼容性检测装置50可以包括第一确定单元501、第二确定单元502、第一查找单元503、反馈单元504、解析单元505、第三确定单元506、第二查找单元507、第三查找单元508和第四查找单元509;其中,
第一确定单元501,用于根据主工程以及所述主工程引用的文件,确定一个或多个目标类文件;
第二确定单元502,用于确定所述一个或多个目标类文件中每一个目标类文件所引用的类文件名;
第一查找单元503,用于在所述一个或多个目标类文件中,查找每一个所述目标类文件引用的类文件名所对应的第一类文件;
反馈单元504,用于若在所述一个或多个目标类文件中查找所述第一类文件失败,记录并反馈所述类文件名和引用所述类文件名的第二类文件。
可选地,所述第一类文件为所述一个或多个目标类文件中的一个或多个
在一种可能的实现方式中,所述主工程引用的文件为压缩文件;所述一个或多个目标类文件包括所述主工程对应的类文件和所述引用的文件对应的类文件;所述第一确定单元501,具体用于:通过编译所述主工程,得到所述主工程对应的类文件;下载所述主工程引用的文件,通过解压所述引用的文件,得到所述引用的文件对应的类文件;将所述主工程对应的类文件和所述引用的文件对应的类文件确定为所述目标类文件。
在一种可能的实现方式中,所述装置还包括解析单元505,用于:
在所述根据主工程以及所述主工程引用的文件,确定一个或多个目标类文件之后,解析每一个所述目标类文件的文件结构,并将所述文件结构保存到所述目标类文件对应的目标对象,所述文件结构包括所述目标类文件所引用的一个或多个类文件名;根据每一个所述类文件对应的目标对象中的类文件名,确定每一个所述类文件所引用的一个或多个类文件名。
在一种可能的实现方式中,所述装置还包括第三确定单元506,用于:若在所述一个或多个目标类文件中查找所述对应的第一类文件成功,获取所述第一类文件中引用的一个或多个方法;确定每一个所述方法的相关信息,所述相关信息包括所属类文件名、包含的方法信息以及包含的字段信息中的一种或多种。
在一种可能的实现方式中,所述装置还包括第二查找单元507,用于:
在所述获取所述第一类文件中引用的一个或多个方法之后,若方法的相关信息包括所属类文件名,在所述一个或多个目标类文件中,查找与某一方法的所属类文件名对应的第三类文件;若查找所述第三类文件失败,记录并反馈所述某一方法的所属类文件名和所述某一方法所归属的第三类文件。
在一种可能的实现方式中,所述装置还包括第三查找单元508,用于:
在所述获取所述第一类文件中引用的一个或多个方法之后,确定所述一个或多个方法中每一个方法包含的方法信息;且所述方法信息包括方法名和方法签名,则所述接口兼容性检测方法还包括:在所述一个或多个目标类文件中,查找与某一方法中的方法名和方法签名对应的方法;若查找所述对应的方法失败,记录并反馈所述某一方法所归属的第一类文件、引用所述某一方法的表达式的所在行、所述某一方法的方法名和所述某一方法的方法签名。
在一种可能的实现方式中,所述装置还包括第四查找单元509,用于:
在所述获取所述第一类文件中引用的一个或多个方法之后,确定所述每一个方法引用的字段信息,若方法的相关信息包括:包含的字段信息,且所述字段信息包括字段名和字段描述符,则接口兼容性检测方法还包括:在所述一个或多个目标类文件中,查找与某一方法中的字段名和字段描述符对应的字段;若查找所述对应的字段失败,记录并反馈所述某一方法所归属的第一类文件、引用所述字段信息的表达式的所在行、所述某一方法的字段名和所述某一方法的字段描述符。
需要说明的是,图5所示的接口兼容性检测装置50中各个单元的具体实现及有益效果可以对应参照图2-图3所示的方法实施例中的相应描述,此处不再赘述。
请参见图6,图6是本申请实施例提供的一种终端设备的结构示意图;该终端设备60包括处理器601、存储器602、通信接口603、输入装置606和输出装置606,所述处理器601、存储器602、通信接口603、输入装置606和输出装置606通过总线604相互连接。终端设备60可以是平板电脑、个人电脑等终端设备,输入装置606可以是键盘、鼠标、语音录入、触摸板等装置,输出装置可以是显示器等装置。
存储器602包括但不限于是随机存储记忆体(random access memory,RAM)、只读存储器(read-only memory,ROM)、可擦除可编程只读存储器(erasable programmableread only memory,EPROM)、或便携式只读存储器(compact disc read-only memory,CD-ROM),该存储器602用于相关指令及数据的存储。通信接口603用于接收和发送数据。
处理器601可以是一个或多个中央处理器(central processing unit,CPU),在处理器601是一个CPU的情况下,该CPU可以是单核CPU,也可以是多核CPU。
该终端设备60中的处理器601用于读取所述存储器602中存储的程序代码,执行以下操作:
处理器601用于根据主工程以及所述主工程引用的文件,确定一个或多个目标类文件;确定所述一个或多个目标类文件中每一个目标类文件所引用的类文件名;在所述一个或多个目标类文件中,查找所述每一个目标类文件引用的类文件名所对应的第一类文件;若在所述一个或多个目标类文件中查找所述第一类文件失败,记录并反馈所述类文件名和引用所述类文件名的第二类文件,所述第一类文件为所述一个或多个目标类文件中的一个或多个。
在一种可能的实现方式中,所述主工程引用的文件为压缩文件;所述一个或多个目标类文件包括所述主工程对应的类文件和所述引用的文件对应的类文件;所述处理器601用于:通过编译所述主工程,得到所述主工程对应的类文件;下载所述主工程引用的文件,通过解压所述引用的文件,得到所述引用的文件对应的类文件。
在一种可能的实现方式中,所述处理器601用于:解析所述每一个目标类文件的文件结构,保存到所述每一个目标类文件对应的目标对象,所述文件结构包括所述目标类文件所引用的一个或多个类文件名;根据所述每一个类文件对应的目标对象中的类文件名,确定所述每一个类文件所引用的一个或多个类文件名。
在一种可能的实现方式中,所述处理器601用于:若在所述一个或多个目标类文件中查找所述对应的第一类文件成功,获取所述第一类文件中引用的一个或多个方法;确定所述一个或多个方法中每一个方法的所属类文件名、包含的方法信息以及字段信息中的一种或多种。
在一种可能的实现方式中,所述处理器601用于:确定所述一个或多个方法中每一个方法的所属类文件名;在所述一个或多个目标类文件中,查找与所述每一个方法的所属类文件名对应的第三类文件;若查找所述第二类文件失败,记录并反馈所述所属类文件名和所述第一类文件。
在一种可能的实现方式中,所述处理器601用于:确定所述一个或多个方法中每一个方法包含的方法信息;所述方法信息包括方法名和方法签名;在所述一个或多个目标类文件中,查找与所述每一个方法中的方法名和方法签名对应的方法;若查找所述对应的方法失败,记录并反馈所述第一类文件、包含所述方法信息的表达式所在行、所述对应方法的所属类文件、所述对应方法的方法名和所述对应方法的方法签名。
在一种可能的实现方式中,所述处理器601用于:确定所述每一个方法引用的字段信息,所述字段信息包括字段名和字段描述符;根据所述每一个方法的字段名和字段描述符,在所述一个或多个目标类文件中查找对应的字段;若查找所述对应的字段失败,记录并反馈所述第一类文件、包含所述字段信息的表达式所在行、所述对应字段的所属类文件、所述对应字段的字段名和所述对应字段的字段描述符。
本申请实施例中,编译主工程以及主工程所引用的库文件得到对应的类文件(即class文件)。对每一个类文件中所引用的类文件名进行确定,并根据确定的类文件名在得到多个目标类文件中查找是否存在对应的类文件。遍历所有类文件,重复以上的查找操作。如果根据某一个类文件引用的类文件名,在一个或多个类文件中查找失败的话,就将该某一个类文件以及其引用的类文件名记录并反馈。通过实施本申请实施例,在工程编译期间自动化地检测并报告AAR接口调用的兼容性问题。可以把兼容性问题提前暴露在编译期供开发者解决而避免被动地等待出现线上异常的问题,提高应用程序的稳定性。
需要说明的是,上述各个操作的实现及有益效果还可以对应参照图2-图3所示的方法实施例的相应描述。
本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,当所述程序指令被处理器执行时,图2-图4所示的方法流程得以实现。
本申请实施例还提供了一种计算机程序,所述计算机程序包括程序指令,当所述程序指令被处理器执行时,图2-图3所示的方法流程得以实现。
在本发明所提供的几个实施例中,应该理解到,所揭露的装置、设备和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (10)
1.一种接口兼容性检测的方法,其特征在于,包括:
根据主工程以及所述主工程引用的文件,确定一个或多个目标类文件;
确定所述一个或多个目标类文件中每一个目标类文件所引用的类文件名;
在所述一个或多个目标类文件中,查找每一个所述目标类文件包含的类文件名所对应的第一类文件;
若在所述一个或多个目标类文件中查找所述第一类文件失败,记录并反馈所述类文件名和引用所述类文件名的第二类文件。
2.根据权利要求1所述的接口兼容性检测方法,其特征在于,所述根据主工程以及所述主工程引用的文件,确定一个或多个目标类文件,包括:
通过编译所述主工程,得到所述主工程对应的类文件;
下载所述主工程引用的文件,所述主工程引用的文件为压缩文件;通过解压所述引用的文件,得到所述引用的文件对应的类文件;
将所述主工程对应的类文件和所述引用的文件对应的类文件确定为所述目标类文件。
3.根据权利要求1所述的接口兼容性检测方法,其特征在于,所述确定所述一个或多个目标类文件中每一个目标类文件所引用的类文件名,包括:
解析每一个所述目标类文件的文件结构,并将所述文件结构保存到所述目标类文件对应的目标对象,所述文件结构包括所述目标类文件所引用的一个或多个类文件名;
根据每一个所述类文件对应的目标对象中的类文件名,确定每一个所述类文件所引用的一个或多个类文件名。
4.根据权利要求1所述的接口兼容性检测方法,其特征在于,所述方法还包括:
若在所述一个或多个目标类文件中查找所述第一类文件成功,获取所述第一类文件中引用的一个或多个方法;
确定每一个所述方法的相关信息,所述相关信息包括所属类文件名、包含的方法信息以及包含的字段信息中的一种或多种。
5.根据权利要求4所述的接口兼容性检测方法,其特征在于,若方法的相关信息包括所属类文件名,则所述接口兼容性检测方法还包括:
在所述一个或多个目标类文件中,查找与某一方法的所属类文件名对应的第三类文件;
若查找所述第三类文件失败,记录并反馈所述某一方法的所属类文件名和所述某一方法所归属的第三类文件。
6.根据权利要求4所述的接口兼容性检测方法,其特征在于,若方法的相关信息包括:包含的方法信息,且所述方法信息包括方法名和方法签名,则所述接口兼容性检测方法还包括:
在所述一个或多个目标类文件中,查找与某一方法中的方法名和方法签名对应的方法;
若查找所述对应的方法失败,记录并反馈所述某一方法所归属的第一类文件、引用所述某一方法的表达式的所在行、所述某一方法的方法名和所述某一方法的方法签名。
7.根据权利要求4所述的接口兼容性检测方法,其特征在于,若方法的相关信息包括:包含的字段信息,且所述字段信息包括字段名和字段描述符,则接口兼容性检测方法还包括:
在所述一个或多个目标类文件中,查找与某一方法中的字段名和字段描述符对应的字段;
若查找所述对应的字段失败,记录并反馈所述某一方法所归属的第一类文件、引用所述字段信息的表达式的所在行、所述某一方法的字段名和所述某一方法的字段描述符。
8.一种接口兼容性检测装置,其特征在于,包括:
第一确定单元,用于根据主工程以及所述主工程引用的文件,确定一个或多个目标类文件;
第二确定单元,用于确定所述一个或多个目标类文件中每一个目标类文件所引用的类文件名;
查找单元,用于在所述一个或多个目标类文件中,查找所述每一个所述目标类文件引用的类文件名所对应的第一类文件;
记录并反馈单元,用于若在所述一个或多个目标类文件中查找所述第一类文件失败,记录并反馈所述类文件名和引用所述类文件名的第二类文件。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,该计算机程序被处理器执行时实现如权利要求1-7任一项所述的方法。
10.一种计算机程序,其特征在于,所述计算机程序包括指令,当所述计算机程序被计算机执行时,使得所述计算机执行如权利要求1-7中任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010107627.2A CN111352631B (zh) | 2020-02-21 | 2020-02-21 | 一种接口兼容性检测方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010107627.2A CN111352631B (zh) | 2020-02-21 | 2020-02-21 | 一种接口兼容性检测方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111352631A true CN111352631A (zh) | 2020-06-30 |
CN111352631B CN111352631B (zh) | 2024-03-19 |
Family
ID=71195763
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010107627.2A Active CN111352631B (zh) | 2020-02-21 | 2020-02-21 | 一种接口兼容性检测方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111352631B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112540788A (zh) * | 2020-12-03 | 2021-03-23 | 南方电网数字电网研究院有限公司 | 一种兼容多厂商无人机飞控应用app的方法 |
CN113360183A (zh) * | 2021-06-03 | 2021-09-07 | 湖南快乐阳光互动娱乐传媒有限公司 | 一种保障java对外服务向下兼容的方法及相关装置 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7765194B1 (en) * | 2006-03-17 | 2010-07-27 | Cisco Technology, Inc. | Detection and enforcement of version compatibility in network devices |
CN103440337A (zh) * | 2013-09-09 | 2013-12-11 | 百度在线网络技术(北京)有限公司 | Api兼容性扫描方法和api兼容性扫描装置 |
CN105630463A (zh) * | 2014-10-28 | 2016-06-01 | 阿里巴巴集团控股有限公司 | 用于检测jar包冲突的方法及装置 |
CN106775842A (zh) * | 2016-11-30 | 2017-05-31 | 北京酷我科技有限公司 | 一种可自定义的dex分包的方法 |
CN107577483A (zh) * | 2017-08-31 | 2018-01-12 | 武汉斗鱼网络科技有限公司 | 组件工程调用主工程代码的方法、存储介质、设备及*** |
CN108897588A (zh) * | 2018-07-09 | 2018-11-27 | 广州市千钧网络科技有限公司 | 一种用于模块间通信的路由方法和路由装置 |
CN109725905A (zh) * | 2018-12-26 | 2019-05-07 | 苏州思必驰信息科技有限公司 | 基于源码集的软件架构及实现方法、用于编译pins组件的插件及应用方法 |
-
2020
- 2020-02-21 CN CN202010107627.2A patent/CN111352631B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7765194B1 (en) * | 2006-03-17 | 2010-07-27 | Cisco Technology, Inc. | Detection and enforcement of version compatibility in network devices |
CN103440337A (zh) * | 2013-09-09 | 2013-12-11 | 百度在线网络技术(北京)有限公司 | Api兼容性扫描方法和api兼容性扫描装置 |
CN105630463A (zh) * | 2014-10-28 | 2016-06-01 | 阿里巴巴集团控股有限公司 | 用于检测jar包冲突的方法及装置 |
CN106775842A (zh) * | 2016-11-30 | 2017-05-31 | 北京酷我科技有限公司 | 一种可自定义的dex分包的方法 |
CN107577483A (zh) * | 2017-08-31 | 2018-01-12 | 武汉斗鱼网络科技有限公司 | 组件工程调用主工程代码的方法、存储介质、设备及*** |
CN108897588A (zh) * | 2018-07-09 | 2018-11-27 | 广州市千钧网络科技有限公司 | 一种用于模块间通信的路由方法和路由装置 |
CN109725905A (zh) * | 2018-12-26 | 2019-05-07 | 苏州思必驰信息科技有限公司 | 基于源码集的软件架构及实现方法、用于编译pins组件的插件及应用方法 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112540788A (zh) * | 2020-12-03 | 2021-03-23 | 南方电网数字电网研究院有限公司 | 一种兼容多厂商无人机飞控应用app的方法 |
CN113360183A (zh) * | 2021-06-03 | 2021-09-07 | 湖南快乐阳光互动娱乐传媒有限公司 | 一种保障java对外服务向下兼容的方法及相关装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111352631B (zh) | 2024-03-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2021098148A1 (zh) | 一种软件编译方法、装置及电子设备和存储介质 | |
US7127707B1 (en) | Intellisense in project upgrade | |
US7836440B2 (en) | Dependency-based grouping to establish class identity | |
Dietrich et al. | Broken promises: An empirical study into evolution problems in java programs caused by library upgrades | |
US8856752B2 (en) | Monitoring asset state to enable partial build | |
US8516505B2 (en) | Cross-platform compatibility framework for computer applications | |
US10083029B2 (en) | Detect application defects by correlating contracts in application dependencies | |
US10514898B2 (en) | Method and system to develop, deploy, test, and manage platform-independent software | |
CN111176722B (zh) | 第三方库的文件版本检测方法、装置及存储介质 | |
CN113835713B (zh) | 源码包下载方法、装置、计算机设备和存储介质 | |
CN112099880B (zh) | 场景驱动的应用程序约减方法和*** | |
US20080040656A1 (en) | Instance annotation in object-oriented programming | |
CN111352631B (zh) | 一种接口兼容性检测方法及装置 | |
CN111008017B (zh) | 一种基于oclint的待提交文件预审方法及相关组件 | |
CN112769706A (zh) | 组件化路由方法及*** | |
CN114661423A (zh) | 集群配置检测方法、装置、计算机设备及存储介质 | |
CN113515303A (zh) | 一种项目转型方法、装置和设备 | |
CN112445706A (zh) | 程序异常代码获取方法、装置、电子设备以及存储介质 | |
CN116578282A (zh) | 代码生成方法、装置、电子设备及介质 | |
CN111258802A (zh) | 捕获应用程序崩溃信息的方法及相关设备 | |
US20210055919A1 (en) | Detection of semantic equivalence of program source codes | |
CN111367796A (zh) | 应用程序调试方法及装置 | |
CN115705294B (zh) | 用于获取函数调用信息的方法、装置、电子设备和介质 | |
CN115543486B (zh) | 面向无服务器计算的冷启动延迟优化方法、装置和设备 | |
CN111273940A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |