CN112162776B - 依赖关系获取方法及装置 - Google Patents

依赖关系获取方法及装置 Download PDF

Info

Publication number
CN112162776B
CN112162776B CN202010923095.XA CN202010923095A CN112162776B CN 112162776 B CN112162776 B CN 112162776B CN 202010923095 A CN202010923095 A CN 202010923095A CN 112162776 B CN112162776 B CN 112162776B
Authority
CN
China
Prior art keywords
dependency relationship
program file
dependency
file
information
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
Application number
CN202010923095.XA
Other languages
English (en)
Other versions
CN112162776A (zh
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.)
Vivo Mobile Communication Co Ltd
Original Assignee
Vivo Mobile Communication 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 Vivo Mobile Communication Co Ltd filed Critical Vivo Mobile Communication Co Ltd
Priority to CN202010923095.XA priority Critical patent/CN112162776B/zh
Publication of CN112162776A publication Critical patent/CN112162776A/zh
Application granted granted Critical
Publication of CN112162776B publication Critical patent/CN112162776B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/77Software metrics

Abstract

本申请公开了一种依赖关系获取方法及装置,能够解决获取的依赖关系的粒度较粗,准确度较低的问题。包括:获取第一依赖关系,该第一依赖关系为第一程序文件与第二程序文件之间的依赖关系;解析该第一程序文件,得到与第一程序文件中的每个第一对象对应的N个第一信息,每个第一信息用于指示一个第一对象与至少一个第二对象的依赖关系,至少一个第二对象为该第二程序文件中的对象,N为正整数;根据该第一依赖关系和该N个第一信息,获取至少一个第二依赖关系,每个第二依赖关系为一个第一对象与该第二程序文件之间的依赖关系;其中,该第二程序文件为源文件,该第一程序文件为对该源文件编译后的文件。

Description

依赖关系获取方法及装置
技术领域
本申请实施例涉及通信技术领域,尤其涉及一种依赖关系获取方法及装置。
背景技术
随着电子设备的快速发展,基于Android的应用开发逐渐从依赖较少的程序模块的单一开发模式,向依赖大量程序模块协同作用的大工程开发模式转变。而随着工程量的增加,所使用的程序模块数量也大量增加,进而程序模块与程序模块之间的依赖关系也变得更加复杂。
目前,相关技术可以通过查看Gradle依赖树中的声明,获取各程序模块之间的依赖关系。但由于程序模块中通常还包括类、行等更细化的对象,因此,获取的依赖关系的粒度较粗,准确度较低。
发明内容
本申请实施例的目的是提供一种依赖关系获取方法及装置,能够解决获取的依赖关系的粒度较粗,准确度较低的问题。
为了解决上述技术问题,本申请是这样实现的:
第一方面,本申请实施例提供了一种依赖关系获取方法,该方法包括:获取第一依赖关系,该第一依赖关系为第一程序文件与第二程序文件之间的依赖关系;解析该第一程序文件,得到与该第一程序文件中的每个第一对象对应的N个第一信息,每个第一信息用于指示一个第一对象与至少一个第二对象的依赖关系,该至少一个第二对象为该第二程序文件中的对象,N为正整数;根据该第一依赖关系和该N个第一信息,获取至少一个第二依赖关系,每个第二依赖关系为一个第一对象与该第二程序文件之间的依赖关系;其中,该第二程序文件为源文件,该第一程序文件为对该源文件编译后的文件。
第二方面,本申请实施例提供了一种依赖关系获取装置,该装置包括:获取模块和解析模块。获取模块,用于获取第一依赖关系,该第一依赖关系为第一程序文件与第二程序文件之间的依赖关系;解析模块,用于解析该第一程序文件,得到与该第一程序文件中的每个第一对象对应的N个第一信息,每个第一信息用于指示一个第一对象与至少一个第二对象的依赖关系,该至少一个第二对象为该第二程序文件中的对象,N为正整数;获取模块,还用于根据该第一依赖关系和该N个第一信息,获取至少一个第二依赖关系,每个第二依赖关系为一个第一对象与该第二程序文件之间的依赖关系;其中,该第二程序文件为源文件,该第一程序文件为对该源文件编译后的文件。
第三方面,本申请实施例提供了一种电子设备,该电子设备包括处理器、存储器及存储在存储器上并可在处理器上运行的程序或指令,程序或指令被处理器执行时实现如第一方面的方法的步骤。
第四方面,本申请实施例提供了一种可读存储介质,该可读存储介质上存储程序或指令,程序或指令被处理器执行时实现如第一方面的方法的步骤。
第五方面,本申请实施例提供了一种芯片,该芯片包括处理器和通信接口,通信接口和处理器耦合,该处理器用于运行程序或指令,实现如第一方面的方法。
在本申请实施例中,获取第一依赖关系,该第一依赖关系为第一程序文件与第二程序文件之间的依赖关系;解析该第一程序文件,得到与该第一程序文件中的每个第一对象对应的N个第一信息,每个第一信息用于指示一个第一对象与至少一个第二对象的依赖关系,该至少一个第二对象为该第二程序文件中的对象,N为正整数;根据该第一依赖关系和该N个第一信息,获取至少一个第二依赖关系,每个第二依赖关系为一个第一对象与该第二程序文件之间的依赖关系;其中,该第二程序文件为源文件,该第一程序文件为对该源文件编译后的文件。通过该方法,电子设备可以解析第一程序文件,得到更细化的类、行与第二程序文件对应的第一信息,并根据表示第一程序文件和第二程序文件的第一依赖关系,获取粒度更细,准确度更高的第二依赖关系。从而依据该第二依赖关系,从程序开发之初,即可避免程序不兼容故障的发生,进而提高程序开发效率,减少耗时。
附图说明
图1为本申请实施例提供的一种依赖关系获取方法的示意图之一;
图2为本申请实施例提供的一种依赖关系获取方法的示意图之二;
图3为本申请实施例提供的一种依赖关系获取方法的示意图之三;
图4为本申请实施例提供的一种依赖关系获取方法的示意图之四;
图5为本申请实施例提供的一种依赖关系获取方法的示意图之五;
图6为本申请实施例提供的一种依赖关系获取装置的结构示意图之一;
图7为本申请实施例提供的一种依赖关系获取装置的结构示意图之二;
图8为本申请实施例提供的电子设备的硬件示意图之一;
图9为本申请实施例提供的电子设备的硬件示意图之二。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请的说明书和权利要求书中的术语“第一”、“第二”等是用于区别类似的对象,而不用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。且“第一”、“第二”等所区分的对象通常为一类,并不限定对象的个数,例如第一对象可以是一个,也可以是多个。此外,说明书以及权利要求中“和/或”表示所连接对象的至少其中之一,字符“/”,一般表示前后关联对象是一种“或”的关系。
下面结合附图,通过具体的实施例及其应用场景对本申请实施例提供的依赖关系获取方法进行详细地说明。
本申请实施例中,有以下只是少一种场景,需要电子设备获取依赖关系:
场景一,用户需要检测一个Android工程是否能在某厂家生产的电子设备上运行。
场景二,应用商店检测新上架的应用程序能够对应使用的电子设备的型号。
场景三,第三方开发者可以检测API与预设程序文件对应的API是否兼容。
在本申请实施例中,获取第一依赖关系,该第一依赖关系为第一程序文件与第二程序文件之间的依赖关系;解析该第一程序文件,得到与该第一程序文件中的每个第一对象对应的N个第一信息,每个第一信息用于指示一个第一对象与至少一个第二对象的依赖关系,该至少一个第二对象为该第二程序文件中的对象,N为正整数;根据该第一依赖关系和该N个第一信息,获取至少一个第二依赖关系,每个第二依赖关系为一个第一对象与该第二程序文件之间的依赖关系;其中,该第二程序文件为源文件,该第一程序文件为对该源文件编译后的文件。通过该方法,电子设备可以解析第一程序文件,得到更细化的类、行与第二程序文件对应的第一信息,并根据表示第一程序文件和第二程序文件的第一依赖关系,获取粒度更细,准确度更高的第二依赖关系。从而依据该第二依赖关系,从程序开发之初,即可避免程序不兼容故障的发生,进而提高程序开发效率,减少耗时。
如图1所示,本申请实施例提供一种依赖关系获取方法,该方法可以包括下述的步骤101至步骤103。
步骤101、电子设备获取第一依赖关系。
其中,上述第一依赖关系为第一程序文件与第二程序文件之间的依赖关系。
可选的,本申请实施例中,第二程序文件为源文件,第一程序文件为对该源文件编译后的文件。
可选的,本申请实施例中,上述将第二程序文件编译为第一程序文件时通过编译器完成的。该编译器通常用于将一种高级的计算机语言(例如,Pascal、C、C++、Java、汉语编程等或汇编语言等)翻译为可被机器执行的另一种低级语言的程序。而该低级语言可以为预设的目标代码,或机器代码等。需要说明的是,下述实施例以Java的编译过程为例,对本申请实施例所提供的依赖关系获取方法进行具体说明。
需要说明的是,本申请实施例中,参考Android工程的编译过程,电子设备可以将Java源代码(即source code,是指未编译的按照Java语言规范书写的文本文件,是一系列人类可读的计算机语言指令)、Java接口(即Java interfaces,是指在Java编程语言中一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。)和系统资源文件经过编译器编译得到class文件(即,文件格式为.class格式的文件,简称class文件)的过程具体可以为:电子设备将Java源代码和打包工具(android asset packaging tool,AAPT)生成的R.java文件斗殴会被编译成.class文件,再被编译为.dex文件(简称dex文件),再最终通过apk builder生成apk文件。
可选的,本申请实施例中,该第二程序文件可以为Java源代码文件,该第一程序文件可以为对Java源代码文件编译后得到的class文件。其中,该class文件即为通常所说的Java字节码,它是对Java源码的二进制转义。
需要说明的是,本申请实施例中,一个第二文件可以编译得到多个第一文件,而每个第一文件仅有一个第二文件与其对应。即同一个Java源代码文件经过不同的编译可以得到多个class文件,而每个class文件仅有一个Java源代码文件与其对应。
可选的,本申请实施例中,上述第一依赖关系具体可以为第一程序文件依赖第二程序文件的关系,以及第一程序文件被第二程序文件或其他程序文件的依赖的关系,即电子设备获取的第一依赖关系同时包括依赖和被依赖关系。
需要说明的是,本申请实施例中,电子设备检测第一程序文件中的应用程序接口API,获取第一依赖关系。具体的,电子设备可以检测第一程序文件中的每个API的两端的对象,进而确定第一程序文件与第二程序文件的依赖关系。详细描述可以参见下述步骤101a中的详细描述,此处不再赘述。
步骤102、电子设备解析第一程序文件,得到与第一程序文件中的每个第一对象对应的N个第一信息。
其中,每个第一信息用于指示一个第一对象与至少一个第二对象的依赖关系,该至少一个第二对象为该第二程序文件中的对象,N为正整数。
需要说明的是,本申请实施例中,上述第一对象是指电子设备解析第一程序文件(该第一程序文件为class文件)中的类或行得到第一信息。下述实施例以电子设备逐行解析为例,电子设备可以逐行解析第一程序文件已获取每一行(即每个第一对象)对应的多个第一信息为例进行示例性说明。
可选的,本申请实施例中,上述第一信息,第一程序文件中的第一对象和第二程序文件中的至少一个第二对象的依赖关系。示例性的,假设第一程序文件可以通过调用第二程序文件中的函数来依赖第二程序文件。那么第一程序文件中的某一行语句可以调用多个第二程序文件中的函数,即一个第一对象可以对应多个第一信息。
需要说明的是,本申请实施例中,上述第二对象为第二程序文件中的对象,具体可以为第二程序文件中的类、行,以及定义的函数等。具体可以隔绝需求确定,本申请实施例不作具体限定。
可选的,本申请实施例中,上述电子设备解析第一程序文件,是指电子设备使用字节码解析工具对该第一程序文件(即class文件)的Java字节码进行解析,逐类和/或逐行得到第一信息。其中,该字节码解析工具可以采用Java Assit进行解析,即电子设备可以通过Java Assit对第一程序文件中的Java字节码进行逐行解析,以获取每一行对应的N个第一信息。
可选的,本申请实施例中,电子设备在逐类和/或逐行解析Java字节码中的具体词句,得到第一信息的过程中,电子设备具体可以解析以下至少一项信息:词句所在类的名称、词句在哪个方法被调用、词句在哪一行被调用、被调用类的名称、被调用类的方法等。具体可以根据实际使用需求进行确定,本申请实施例不作具体限定。
需要说明的是,本申请实施例中,在Android编译的过程中,Transform为AndroidGradle插件提供一个字节码Hook入口,电子设备可以通过该入口将class文件中的字节码以input格式输入;然后,电子设备可以分析该导入文件(如,file文件)的模块名称和对应路径下的文件,建立程序文件(如第二程序文件)和类的对应关系;随后,电子设备再利用Java Assit解析工具,加载class文件,对该字节码文件进行逐行解析,通过词句分析器功能获取详细的调用信息(如词句在哪个方法被调用、词句在哪一行被调用、被调用类的名称、被调用类的方法等)。
步骤103、电子设备根据第一依赖关系和N个第一信息,获取至少一个第二依赖关系。
其中,每个第二依赖关系为一个第一对象与该第二程序文件之间的依赖关系。
需要说明的是,本申请实施例中,上述第一依赖关系用于反映第一程序文件和第二程序文件之间的依赖情况,侧重于文件层面,并不能详细反映详细的依赖方式,如在第一程序文件的哪一行通过什么方法调用第二程序文件中的哪一个函数。而该N个第一关系,是对第一程序文件按照字节码逐类和/或逐行解析以获取具体的调用方法和调用方式(即第一信息)。电子设备可以根据上述第一依赖关系和该N歌第一信息,一起获取第二依赖关系,该第二依赖关系是第一依赖关系在类或行层面的具体细化。
此外,本申请实施例中,仅根据N个第一信息,电子设备由于无法确定第一程序文件和第二程序文件之间的依赖情况,进而无法准确获取至少一个第二依赖关系。
可选的,本申请实施例中,获取至少一个第二依赖关系的具体方式可以为以下任一项:方式1、电子设备根据第一依赖关系表(该第一依赖关系表用于标识该第一依赖关系)和N个第一信息,得到在第一依赖关系表中增加N个第一信息的第二依赖关系表。方式2、电子设备根据第一依赖关系和N个第一信息,得到反应第一文件中每个第一对象和第二程序文件中的第二对象的依赖关系的信息,该信息可以以表格、文档或数据库等形式进行输出。具体可以根据实际使用需求进行确定,本申请实施例不作具体限定。
需要说明的是,为了更清楚的理解本申请实施例,下面以表1为例进行示例性说明。其中,Class1可以为第一程序文件中的类,Class2可以为第二程序文件中的类,Expr为调用表达式,method1为调用方法,method2为具体的调用函数,Line为调用词句所在的行数。
表1
Class1 Class2 Expr method1 method2 Line
com.account.A com.account.B NewExpr method A <init> 5
com.account.A com.account.B methodCall method A method B 6
示例性的,假设该第二程序文件可以为Java源代码文件,该第一程序文件可以为对Java源代码文件编译后得到的class文件。电子设备可以检测第一程序文件中的所有API,从所有API中确定与第二程序文件相关的API,进而获取表征第一程序文件和第二程序文件的第一依赖表(即第一依赖关系)。然后,电子设备导入class文件的字节码文件,电子设备可以根据文件名和路径建立类的对应关系。随后,电子设备再利用Java Assit解析工具,加载class文件,并对该字节码文件进行逐行解析,通过词句分析器功能获取详细的调用信息(如词句在哪个方法被调用、词句在哪一行被调用、被调用类的名称、被调用类的方法等,即N个第一信息)。之后,电子设备可以根据上述第一依赖关系表和该详细的调用信息(即N个第一信息),得到第二依赖关系表(如表1)。如表1所述,第一程序文件中的com.account.A的第5行通过method A的方式调用了com.account.B的构造函数(即method2中的init);第一程序文件中的com.account.A的第6行通过method A的方式调用了com.account.B的method B函数。如此,电子设备可以得到第一程序文件中的类与第二程序文件中的内容的详细依赖关系,即第二依赖关系。
本申请实施例提供一种依赖关系获取方法,获取第一依赖关系,该第一依赖关系为第一程序文件与第二程序文件之间的依赖关系;解析该第一程序文件,得到与该第一程序文件中的每个第一对象对应的N个第一信息,每个第一信息用于指示一个第一对象与至少一个第二对象的依赖关系,该至少一个第二对象为该第二程序文件中的对象,N为正整数;根据该第一依赖关系和该N个第一信息,获取至少一个第二依赖关系,每个第二依赖关系为一个第一对象与该第二程序文件之间的依赖关系;其中,该第二程序文件为源文件,该第一程序文件为对该源文件编译后的文件。通过该方法,电子设备可以解析第一程序文件,得到更细化的类、行与第二程序文件对应的第一信息,并根据表示第一程序文件和第二程序文件的第一依赖关系,获取粒度更细,准确度更高的第二依赖关系。从而依据该第二依赖关系,从程序开发之初,即可避免程序不兼容故障的发生,进而提高程序开发效率,减少耗时。
可选的,结合图1,如图2所示,上述步骤101具体可以通过下述步骤101a实现。
步骤101a、电子设备通过检测第一程序文件中的应用程序接口API,获取第一依赖关系。
需要说明的是,本申请实施例中,第一程序文件可以与多个程序文件从在依赖关系,例如,第二程序文件,第三程序文件和第四程序文件等。电子设备可以检测第一程序文件中的所有的API,每个API用于指示一个程序文件与第一程序文件的依赖关系,然后,电子设备可以通过接口标记、接口查询等方式从所有API中确定出与第二程序文件相关的API,并记录这些API,如此电子设备可以通过检测和筛选API,获取第一程序文件和第二程序文件的依赖关系,即第一依赖关系。
可选的,本申请实施例中,电子设备可以检测第一程序文件中的所有API,并从所有API中确定与第二程序文件相关的API,进而获取表征第一程序文件和第二程序文件的第一依赖表(即第一依赖关系)。
可以理解的是,由于电子设备可以通过检测第一程序文件中的应用程序接口API,从而获取第一程序文件和第二程序文件的依赖关系,即第一依赖关系,从而为后续步骤根据该第一依赖关系获取粒度更细,准确度更高的依赖关系提供数据来源和基础。
可选的,结合图1,如图3所示,每个第一信息包括对象标识和调用函数,该对象标识用于指示第一对象在该第一程序文件中的位置,该调用函数用于指示第一对象与至少一个第二对象之间的依赖方式。上述步骤103,具体可以通过下述步骤103a实现。
步骤103a、电子设备根据第一依赖关系,以及每个第一信息中的对象标识和调用函数,获取至少一个第二依赖关系。
其中,每个第二依赖关系用于指示位于目标位置的第一对象与第二程序文件之间以目标依赖方式依赖;该目标位置为一个第一信息中的对象标识指示的位置,该目标依赖方式为一个第一信息中的调用函数指示的依赖方式。
需要说明的是,本申请实施例中,上述对象标识用于指示第一对象在该第一程序文件中的位置。该对象标识可以为行数,具体的,该上述用于指示第一对象在该第一程序文件中的位置。另外,该对象标识还可以为用于表示第一对象在该第一程序文件中的位置的其他标识,如,段数,页数等。本申请实施例不作具体限定,可以根据实际使用需求进行确定。
需要说明的是,本申请实施例中,上述调用函数用于指示第一对象与至少一个第二对象之间的依赖方式。该调用函数可以为第二程序文件中定义的函数,或第三方库中的函数,第二程序文件调用该第三方库中的函数,而第一程序文件又调用第二程序文件中的该函数或该函数的参数(如,输出参数,定义的变量)等。具体可以根据实际使用需求进行确定,本申请实施例不作具体限定。
可选的,本申请实施例中,电子设备根据第一依赖关系,以及每个第一信息中的对象标识和调用函数,可以确定目标位置的第一对象与第二程序文件之间,以第一信息中的调用函数指示的依赖方式。电子设备可以将指示第一对象的目标位置的信息(如对象标识)、调用函数、第一对象,以及第一对象对应的第二程序文件生成第二依赖关系表,该第二依赖关系表用于指示上述至少一个依赖关系。
可以理解的是,由于每个第一信息包括用于指示第一对象在该第一程序文件中的位置对象标识,以及用于指示第一对象与至少一个第二对象之间的依赖方式调用函数,因此,电子设备可以在第一依赖关系的基础上,再根据每个第一信息中的对象标识和调用函数,获取至少一个第二依赖关系。如此,电子设备可以获取第一对象在第一程序文件中的位置,以及与第二对象以何种方式依赖,进而电子设备可以获取粒度更细,更加准确的依赖关系。
可选的,结合图1,如图4所示,在上述步骤103之后,本申请实施例所提供的依赖关系获取方法还包括下述步骤104和步骤105。
步骤104、电子设备根据至少一个第二依赖关系,确定多个API。
可选的,本申请实施例中,电子设备可以根据第一条件,确定多个API。其中,该第一条件可以为电子设备需要进行数据连接,工程开发,程序检测等任务对应的API。
步骤105、在多个API中的至少有一个API与预设API不匹配的情况下,电子设备输出目标提示信息。
其中,上述目标提示信息用于提示用户第一程序文件与预设程序文件不兼容。
需要说明的是,本申请实施例中,多个API中的至少有一个API与预设API进行匹配的场景可以为以下任一项:场景一,用户需要检测一个Android工程是否能在某厂家生产的电子设备(如,手机)上运行,那么可以获取该厂家电子设备的API接口使用规范中的API作为预设API,并将要检测的第一程序文件中根据第二依赖关系确定的多个API与该预设API相比较。当多个API中的全部API与预设API均匹配时,该第一程序文件能够在该厂家生产的电子设备中运行;当多个API中的至少有一个API与预设API不匹配时,第一程序文件与该厂家生产的电子设备不兼容。场景二,应用商店可以通过本申请实施例所提供的方法检测,新上架的应用程序能够对应使用的电子设备的型号(例如,机型,对应的Android系统号等)。场景三,电子设备根据至少一个第二依赖关系,生成一个包含该第二依赖关系的插件,第三方开发者可以通过该插件中包含的API快速检测程序文件与预设程序文件是否兼容。
可选的,本申请实施例中,上述目标提示信息可以为以下至少一项:文字提示信息,语音提示信息,动画提示信息,振动提示信息等,具体可以根据实际使用需求进行确定,本申请实施例不作具体限定。
可选的,本申请实施例中,在电子设备输出目标提示信息之后,电子设备可以接收用户对该提示信息的输入查看不兼容的API,电子设备可以输入图标,文字,接口数据信息等方便用户查看,或者电子设备可以通过显示API接口指示灯的点亮或关闭,方便用户查看,其中,每个点亮的API指示灯用于标识该API接口兼容,每个不点亮的API指示灯永不标识该API接口不兼容。
可以理解的是,由于电子设备可以根据至少一个第二依赖关系确定的多个API与预设API不匹配,则输出目标提示信息,因此,用户可以通过查看电子设备是否输出目标提示信息,进而确定第一程序文件与预设程序文件不兼容,从而可以提高程序开发的效率,减少耗时。
可选的,结合图4,如图5所示,上述步骤104具体可以通过下述步骤104a实现。
步骤104a、电子设备根据至少一个第二依赖关系中每个第二依赖关系对应的目标依赖方式,确定多个API。
可选的,本申请实施例中,上述至少一个第二依赖关系中每个第二依赖关系可以用于确定一个或多个API,即一个第二依赖关系可以对应至少一个API,具体的,一个第二依赖关系为第一程序文件中的某一行字节码对应多个第二程序文件中的函数,从而电子设备可以根据每个函数确定对应的API,进而确定多个API。
需要说明的是,本申请实施例中,上述函数与API的对应关系可以为:一个函数对应一个API,或者,一个API对应至少一个函数,上述函数与API的对应关系本申请实施例不作具体限定。
可以理解的是,本申请实施例中,电子设备根据至少一个第二依赖关系中每个第二依赖关系对应的目标依赖方式,确定多个API,进而方便判断该多个API与预设API不匹配的情况下输出目标提示信息,如此,用户可以通过查看电子设备是否输出目标提示信息,确定第一程序文件与预设程序文件不兼容,从而及早提示用户,方便用户及时处理,并可以提高程序开发的效率,减少耗时。
需要说明的是,本申请实施例提供的依赖关系获取方法,执行主体可以为依赖关系获取装置,或者该依赖关系获取装置中的用于执行依赖关系获取方法的控制模块。本申请实施例中以依赖关系获取装置执行依赖关系获取方法为例,说明本申请实施例提供的装置。
如图6所示,本申请实施例提供一种依赖关系获取装置600。该依赖关系获取装置600可以包括:获取模块601和解析模块602。获取模块601,可以用于获取第一依赖关系,该第一依赖关系为第一程序文件与第二程序文件之间的依赖关系。解析模块602,可以用于解析该第一程序文件,得到与该第一程序文件中的每个第一对象对应的N个第一信息,每个第一信息用于指示一个第一对象与至少一个第二对象的依赖关系,该至少一个第二对象为该第二程序文件中的对象,N为正整数。获取模块601,还可以用于根据该第一依赖关系和该N个第一信息,获取至少一个第二依赖关系,每个第二依赖关系为一个第一对象与该第二程序文件之间的依赖关系。其中,该第二程序文件为源文件,该第一程序文件为对该源文件编译后的文件。
可选的,本申请实施例中,获取模块601,具体可以用于通过检测第一程序文件中的应用程序接口API,获取该第一依赖关系。
可选的,本申请实施例中,每个第一信息包括对象标识和调用函数,该对象标识用于指示第一对象在第一程序文件中的位置,该调用函数用于指示第一对象与至少一个第二对象之间的依赖方式。获取模块601,还可以具体用于根据第一依赖关系,以及该每个第一信息中的对象标识和调用函数,获取该至少一个第二依赖关系,每个第二依赖关系用于指示位于目标位置的第一对象与该第二程序文件之间以目标依赖方式依赖。其中,该目标位置为一个第一信息中的对象标识指示的位置,该目标依赖方式为该一个第一信息中的调用函数指示的依赖方式。
可选的,结合图6,如图7所示,该依赖关系获取装置600还可以包括确定模块603和输出模块604。确定模块603,可以用于在获取至少一个第二依赖关系之后,根据至少一个第二依赖关系,确定多个API。输出模块604,可以用于在多个API中的至少有一个API与预设API不匹配的情况下,输出目标提示信息,该目标提示信息用于提示用户第一程序文件与预设程序文件不兼容。
可选的,如图7所示,本申请实施例中,确定模块603,具体可以用于根据至少一个第二依赖关系中每个第二依赖关系对应的目标依赖方式,确定多个API。
可选的,本申请实施例中,第二程序文件为源文件,第一程序文件为对该源文件编译后的文件。
本申请实施例中的依赖关系获取装置可以是电子设备中执行依赖关系获取方法的功能实体和/或功能模块,也可以是终端中的部件、集成电路、或芯片。该装置可以是移动电子设备,也可以为非移动电子设备。示例性的,移动电子设备可以为手机、平板电脑、笔记本电脑、掌上电脑、车载电子设备、可穿戴设备、超级移动个人计算机(ultra-mobilepersonal computer,UMPC)、上网本或者个人数字助理(personal digital assistant,PDA)等,非移动电子设备可以为服务器、网络附属存储器(network attached storage,NAS)、个人计算机(personal computer,PC)、电视机(television,TV)、柜员机或者自助机等,本申请实施例不作具体限定。
本申请实施例中的依赖关系获取装置可以为具有操作系统的装置。该操作系统可以为安卓(Android)操作系统,可以为iOS操作系统,还可以为其他可能的操作系统,本申请实施例不作具体限定。
本申请实施例提供的依赖关系获取装置能够实现图1至图7的方法实施例中依赖关系获取装置实现的各个过程,为避免重复,这里不再赘述。
本申请实施例提供一种依赖关系获取装置,获取第一依赖关系,该第一依赖关系为第一程序文件与第二程序文件之间的依赖关系;解析该第一程序文件,得到与该第一程序文件中的每个第一对象对应的N个第一信息,每个第一信息用于指示一个第一对象与至少一个第二对象的依赖关系,该至少一个第二对象为该第二程序文件中的对象,N为正整数;根据该第一依赖关系和该N个第一信息,获取至少一个第二依赖关系,每个第二依赖关系为一个第一对象与该第二程序文件之间的依赖关系;其中,该第二程序文件为源文件,该第一程序文件为对该源文件编译后的文件。通过该方法,该装置可以解析第一程序文件,得到更细化的类、行与第二程序文件对应的第一信息,并根据表示第一程序文件和第二程序文件的第一依赖关系,获取粒度更细,准确度更高的第二依赖关系。从而依据该第二依赖关系,从程序开发之初,即可避免程序不兼容故障的发生,进而提高程序开发效率,减少耗时。
可选的,如图8所示,本申请实施例还提供一种电子设备800,包括处理器801,存储器802,存储在存储器802上并可在所述处理器801上运行的程序或指令,该程序或指令被处理器801执行时实现上述依赖关系获取方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
需要说明的是,本申请实施例中的电子设备包括上述所述的移动电子设备和非移动电子设备。
图9为实现本申请实施例的一种电子设备的硬件结构示意图。
该电子设备2000包括但不限于:射频单元2001、网络模块2002、音频输出单元2003、输入单元2004、传感器2005、显示单元2006、用户输入单元2007、接口单元2008、存储器2009、以及处理器2010等部件。
其中,输入单元2004可以包括图形处理器20041和麦克风20042,显示单元2006可以包括显示面板20061,用户输入单元2007可以包括触控面板20071以及其他输入设备20072,存储器2009可用于存储软件程序(如,操作系统、至少一个功能所需的应用程序)以及各种数据。
本领域技术人员可以理解,电子设备2000还可以包括给各个部件供电的电源(比如电池),电源可以通过电源管理系统与处理器2010逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。图9中示出的电子设备结构并不构成对电子设备的限定,电子设备可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置,在此不再赘述。
其中,处理器2010,可以用于获取第一依赖关系,该第一依赖关系为第一程序文件与第二程序文件之间的依赖关系。处理器2010,也可以用于解析该第一程序文件,得到与该第一程序文件中的每个第一对象对应的N个第一信息,每个第一信息用于指示一个第一对象与至少一个第二对象的依赖关系,该至少一个第二对象为该第二程序文件中的对象,N为正整数。处理器2010,还可以用于根据该第一依赖关系和该N个第一信息,获取至少一个第二依赖关系,每个第二依赖关系为一个第一对象与该第二程序文件之间的依赖关系。
本申请实施例提供一种电子设备,获取第一依赖关系,该第一依赖关系为第一程序文件与第二程序文件之间的依赖关系;解析该第一程序文件,得到与该第一程序文件中的每个第一对象对应的N个第一信息,每个第一信息用于指示一个第一对象与至少一个第二对象的依赖关系,该至少一个第二对象为该第二程序文件中的对象,N为正整数;根据该第一依赖关系和该N个第一信息,获取至少一个第二依赖关系,每个第二依赖关系为一个第一对象与该第二程序文件之间的依赖关系;其中,该第二程序文件为源文件,该第一程序文件为对该源文件编译后的文件。通过该方法,电子设备可以解析第一程序文件,得到更细化的类、行与第二程序文件对应的第一信息,并根据表示第一程序文件和第二程序文件的第一依赖关系,获取粒度更细,准确度更高的第二依赖关系。从而依据该第二依赖关系,从程序开发之初,即可避免程序不兼容故障的发生,进而提高程序开发效率,减少耗时。
可选的,本申请实施例中,处理器2010,具体可以用于通过检测第一程序文件中的应用程序接口API,获取所述第一依赖关系。
可以理解的是,由于电子设备可以通过检测第一程序文件中的应用程序接口API,从而获取第一程序文件和第二程序文件的依赖关系,即第一依赖关系,从而为后续步骤根据该第一依赖关系获取粒度更细,准确度更高的依赖关系提供数据来源和基础。
可选的,本申请实施例中,每个第一信息包括对象标识和调用函数,该对象标识用于指示第一对象在第一程序文件中的位置,该调用函数用于指示第一对象与至少一个第二对象之间的依赖方式。处理器2010,还可以具体用于根据第一依赖关系,以及该每个第一信息中的对象标识和调用函数,获取该至少一个第二依赖关系,每个第二依赖关系用于指示位于目标位置的第一对象与所述第二程序文件之间以目标依赖方式依赖。其中,该目标位置为一个第一信息中的对象标识指示的位置,该目标依赖方式为该一个第一信息中的调用函数指示的依赖方式。
可以理解的是,由于每个第一信息包括用于指示第一对象在该第一程序文件中的位置对象标识,以及用于指示第一对象与至少一个第二对象之间的依赖方式调用函数,因此,电子设备可以在第一依赖关系的基础上,再根据每个第一信息中的对象标识和调用函数,获取至少一个第二依赖关系。如此,电子设备可以获取第一对象在第一程序文件中的位置,以及与第二对象以何种方式依赖,进而电子设备可以获取粒度更细,更加准确的依赖关系。
可选的,本申请实施例中,处理器2010,可以用于在获取至少一个第二依赖关系之后,根据至少一个第二依赖关系,确定多个API。显示单元2006,可以用于在多个API中的至少有一个API与预设API不匹配的情况下,输出目标提示信息,该目标提示信息用于提示用户第一程序文件与预设程序文件不兼容。
可以理解的是,由于电子设备可以根据至少一个第二依赖关系确定的多个API与预设API不匹配,则输出目标提示信息,因此,用户可以通过查看电子设备是否输出目标提示信息,进而确定第一程序文件与预设程序文件不兼容,从而可以提高程序开发的效率,减少耗时。
可选的,本申请实施例中,处理器2010,具体可以用于根据至少一个第二依赖关系中每个第二依赖关系对应的目标依赖方式,确定多个API。
可以理解的是,本申请实施例中,电子设备根据至少一个第二依赖关系中每个第二依赖关系对应的目标依赖方式,确定多个API,进而方便判断该多个API与预设API不匹配的情况下输出目标提示信息,如此,用户可以通过查看电子设备是否输出目标提示信息,确定第一程序文件与预设程序文件不兼容,从而及早提示用户,方便用户及时处理,并可以提高程序开发的效率,减少耗时。
可选的,本申请实施例中,第二程序文件为源文件,第一程序文件为对该源文件编译后的文件。
本申请实施例还提供一种可读存储介质,该可读存储介质上存储有程序或指令,该程序或指令被处理器执行时实现上述依赖关系获取方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
其中,该处理器为上述实施例中的电子设备中的处理器。该可读存储介质,包括计算机可读存储介质,如计算机只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等。
本申请实施例另提供了一种芯片,该芯片包括处理器和通信接口,该通信接口和该处理器耦合,该处理器用于运行程序或指令,实现上述依赖关系获取方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
应理解,本申请实施例提到的芯片还可以称为系统级芯片、系统芯片、芯片系统或片上系统芯片等。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。此外,需要指出的是,本申请实施方式中的方法和装置的范围不限按示出或讨论的顺序来执行功能,还可包括根据所涉及的功能按基本同时的方式或按相反的顺序来执行功能,例如,可以按不同于所描述的次序来执行所描述的方法,并且还可以添加、省去、或组合各种步骤。另外,参照某些示例所描述的特征可在其他示例中被组合。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本申请各个实施例所述的方法。
上面结合附图对本申请的实施例进行了描述,但是本申请并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本申请的启示下,在不脱离本申请宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本申请的保护之内。

Claims (10)

1.一种依赖关系获取方法,其特征在于,所述方法包括:
获取第一依赖关系,所述第一依赖关系为第一程序文件与第二程序文件之间的依赖关系;
解析所述第一程序文件,得到与所述第一程序文件中的每个第一对象对应的N个第一信息,每个第一信息用于指示一个第一对象与至少一个第二对象的依赖关系,所述至少一个第二对象为所述第二程序文件中的对象,N为正整数;
根据所述第一依赖关系和所述N个第一信息,获取至少一个第二依赖关系,每个第二依赖关系为一个第一对象与所述第二程序文件之间的依赖关系;
其中,所述第二程序文件为源文件,所述第一程序文件为对所述源文件编译后的文件。
2.根据权利要求1所述的方法,其特征在于,所述获取第一依赖关系,包括:
通过检测所述第一程序文件中的应用程序接口API,获取所述第一依赖关系。
3.根据权利要求1所述的方法,其特征在于,所述每个第一信息包括对象标识和调用函数,所述对象标识用于指示第一对象在所述第一程序文件中的位置,所述调用函数用于指示第一对象与至少一个第二对象之间的依赖方式;
所述根据所述第一依赖关系和所述N个第一信息,获取至少一个第二依赖关系,包括:
根据所述第一依赖关系,以及所述每个第一信息中的对象标识和调用函数,获取所述至少一个第二依赖关系,每个第二依赖关系用于指示位于目标位置的第一对象与所述第二程序文件之间以目标依赖方式依赖;
其中,所述目标位置为一个第一信息中的对象标识指示的位置,所述目标依赖方式为所述一个第一信息中的调用函数指示的依赖方式。
4.根据权利要求1所述的方法,其特征在于,所述获取至少一个第二依赖关系之后,所述方法还包括:
根据所述至少一个第二依赖关系,确定多个API;
在所述多个API中至少有一个API与预设API不匹配的情况下,输出目标提示信息,所述目标提示信息用于提示用户所述第一程序文件与预设程序文件不兼容。
5.根据权利要求4所述的方法,其特征在于,所述根据所述至少一个第二依赖关系,确定多个API,包括:
根据所述至少一个第二依赖关系中每个第二依赖关系对应的目标依赖方式,确定所述多个API。
6.一种依赖关系获取装置,其特征在于,所述装置包括:获取模块和解析模块;
所述获取模块,用于获取第一依赖关系,所述第一依赖关系为第一程序文件与第二程序文件之间的依赖关系;
所述解析模块,用于解析所述第一程序文件,得到与所述第一程序文件中的每个第一对象对应的N个第一信息,每个第一信息用于指示一个第一对象与至少一个第二对象的依赖关系,所述至少一个第二对象为所述第二程序文件中的对象,N为正整数;
所述获取模块,还用于根据所述第一依赖关系和所述N个第一信息,获取至少一个第二依赖关系,每个第二依赖关系为一个第一对象与所述第二程序文件之间的依赖关系;
其中,所述第二程序文件为源文件,所述第一程序文件为对所述源文件编译后的文件。
7.根据权利要求6所述的装置,其特征在于,所述获取模块,具体用于通过检测所述第一程序文件中的应用程序接口API,获取所述第一依赖关系。
8.根据权利要求6所述的装置,其特征在于,所述每个第一信息包括对象标识和调用函数,所述对象标识用于指示第一对象在所述第一程序文件中的位置,所述调用函数用于指示第一对象与至少一个第二对象之间的依赖方式;
所述获取模块,还具体用于根据所述第一依赖关系,以及所述每个第一信息中的对象标识和调用函数,获取所述至少一个第二依赖关系,每个第二依赖关系用于指示位于目标位置的第一对象与所述第二程序文件之间以目标依赖方式依赖;
其中,所述目标位置为一个第一信息中的对象标识指示的位置,所述目标依赖方式为所述一个第一信息中的调用函数指示的依赖方式。
9.根据权利要求6所述的装置,其特征在于,所述装置还包括确定模块和输出模块;
所述确定模块,用于在获取至少一个第二依赖关系之后,根据所述至少一个第二依赖关系,确定多个API;
所述输出模块,用于在所述多个API中至少有一个API与预设API不匹配的情况下,输出目标提示信息,所述目标提示信息用于提示用户所述第一程序文件与预设程序文件不兼容。
10.根据权利要求9所述的装置,其特征在于,所述确定模块,具体用于根据所述至少一个第二依赖关系中每个第二依赖关系对应的目标依赖方式,确定所述多个API。
CN202010923095.XA 2020-09-04 2020-09-04 依赖关系获取方法及装置 Active CN112162776B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010923095.XA CN112162776B (zh) 2020-09-04 2020-09-04 依赖关系获取方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010923095.XA CN112162776B (zh) 2020-09-04 2020-09-04 依赖关系获取方法及装置

Publications (2)

Publication Number Publication Date
CN112162776A CN112162776A (zh) 2021-01-01
CN112162776B true CN112162776B (zh) 2023-07-14

Family

ID=73858454

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010923095.XA Active CN112162776B (zh) 2020-09-04 2020-09-04 依赖关系获取方法及装置

Country Status (1)

Country Link
CN (1) CN112162776B (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013156802A (ja) * 2012-01-30 2013-08-15 Mitsubishi Electric Corp モジュール依存関係抽出装置、モジュール依存関係抽出方法、及び、プログラム
CN109558139A (zh) * 2018-11-21 2019-04-02 北京城市网邻信息技术有限公司 组件依赖关系的标示方法、装置、计算机设备及存储介质
CN110262803A (zh) * 2019-06-30 2019-09-20 潍柴动力股份有限公司 一种依赖关系的生成方法及装置
CN111475164A (zh) * 2020-03-02 2020-07-31 百度在线网络技术(北京)有限公司 组件依赖关系检测方法、装置以及电子设备

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8327343B2 (en) * 2005-10-20 2012-12-04 Cisco Technology, Inc. Method and system for optimizing source code
US10379825B2 (en) * 2017-05-22 2019-08-13 Ab Initio Technology Llc Automated dependency analyzer for heterogeneously programmed data processing system

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013156802A (ja) * 2012-01-30 2013-08-15 Mitsubishi Electric Corp モジュール依存関係抽出装置、モジュール依存関係抽出方法、及び、プログラム
CN109558139A (zh) * 2018-11-21 2019-04-02 北京城市网邻信息技术有限公司 组件依赖关系的标示方法、装置、计算机设备及存储介质
CN110262803A (zh) * 2019-06-30 2019-09-20 潍柴动力股份有限公司 一种依赖关系的生成方法及装置
CN111475164A (zh) * 2020-03-02 2020-07-31 百度在线网络技术(北京)有限公司 组件依赖关系检测方法、装置以及电子设备

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
一种对象粒度的Java程序并发错误检测框架;王笛等;小型微型计算机系统(06);全文 *

Also Published As

Publication number Publication date
CN112162776A (zh) 2021-01-01

Similar Documents

Publication Publication Date Title
CN107526625B (zh) 一种基于字节码检查的Java智能合约安全检测方法
US7900198B2 (en) Method and system for parameter profile compiling
CN110990019B (zh) 一种Java类分析方法、装置、存储介质及电子设备
US20190004774A1 (en) Automated source code adaption to inject features between platform versions
US9182953B2 (en) Hybrid dynamic code compiling device, method, and service system thereof
CN112100072B (zh) 应用程序代码的静态检测方法、装置、设备及介质
US9104781B2 (en) Obtaining metadata set by imperative statement
CN111176722B (zh) 第三方库的文件版本检测方法、装置及存储介质
CN111459495A (zh) 单元测试代码文件生成方法、电子装置及存储介质
CN115686631B (zh) 一种基于知识基的随机指令生成方法、装置及存储介质
CN109542444B (zh) Java应用的监控方法、装置、服务器和存储介质
CN109284222B (zh) 软件单元、数据处理系统中的项目测试方法、装置及设备
EP2885712B1 (en) Imperative attribution for elements in managed runtimes
CN111352631B (zh) 一种接口兼容性检测方法及装置
CN112069052B (zh) 一种异常对象检测方法、装置、设备及存储介质
CN112162776B (zh) 依赖关系获取方法及装置
CN109426546B (zh) 应用启动方法及装置、计算机存储介质及设备
CN114356779A (zh) 编程语言调试方法、装置及终端设备
CN114706586A (zh) 代码编译、代码运行方法、装置、计算机设备及存储介质
CN115033489A (zh) 代码资源检测方法、装置、电子设备及存储介质
CN113778451A (zh) 文件加载方法、装置、计算机系统和计算机可读存储介质
CN112306493A (zh) 热修复补丁生成方法、装置、存储介质及计算机设备
CN107451050B (zh) 函数获取方法和装置、服务器
US20040177350A1 (en) Windowstm f-language interpreter
CN111488286A (zh) 一种Android模块独立开发的方法及装置

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