CN113535566B - 一种安卓应用校验方法、装置、设备及存储介质 - Google Patents
一种安卓应用校验方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN113535566B CN113535566B CN202110820109.XA CN202110820109A CN113535566B CN 113535566 B CN113535566 B CN 113535566B CN 202110820109 A CN202110820109 A CN 202110820109A CN 113535566 B CN113535566 B CN 113535566B
- Authority
- CN
- China
- Prior art keywords
- function
- file
- android application
- searching
- java
- 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
- 238000000034 method Methods 0.000 title claims abstract description 150
- 238000012795 verification Methods 0.000 title claims abstract description 36
- 230000006870 function Effects 0.000 claims abstract description 286
- 230000001502 supplementing effect Effects 0.000 claims abstract description 14
- 238000012856 packing Methods 0.000 claims description 16
- 238000004590 computer program Methods 0.000 claims description 3
- 230000008569 process Effects 0.000 abstract description 27
- 230000002159 abnormal effect Effects 0.000 abstract description 16
- 238000004806 packaging method and process Methods 0.000 abstract description 10
- 238000004891 communication Methods 0.000 description 4
- 238000011161 development Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 238000004458 analytical method Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000015556 catabolic process Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 239000013589 supplement Substances 0.000 description 2
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000000153 supplemental effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种安卓应用校验方法、装置、设备及存储介质。在安卓应用打包完成后,得到打包文件,获取打包文件中的业务组件和功能函数,从获取到的功能函数中查找可支持业务组件的功能函数,在上述查找结果为空时,补充支持业务组件的功能函数。在安卓应用发布后,用户从应用商店下载安装,在运行安卓应用过程中,由于应用程序中各业务组件均具有支持的功能函数,因此,不会出现由于函数的支持问题导致的异常错误,提高了安卓应用程序的稳定性。
Description
技术领域
本发明实施例涉及安卓应用开发技术,尤其涉及一种安卓应用校验方法、装置、设备及存储介质。
背景技术
随着智能移动终端的出现,涌现出了一批移动终端***,如Android(安卓)***是一种目前广泛应用的智能移动终端***。
安卓***的软件使用的编程语言是Java,并通过一些列的编译打包过程将编写的Java代码最终形成APK(Android Application Package)文件,用户可以从应用商店下载这些APK文件进行安装,在智能终端上得到相应的应用程序(Application,APP)。
目前,安卓应用程序在运行过程中经常会出现由于函数的支持问题导致异常错误,从而导致整个应用进程崩溃。
发明内容
本发明提供一种安卓应用校验方法、装置、设备及存储介质,以避免安卓应用程序在运行过程中出现异常错误,导致应用程序崩溃的问题,提高安卓应用程序的稳定性。
第一方面,本发明实施例提供了一种安卓应用校验方法,包括:
确定安卓应用打包完成,得到打包文件;
获取所述打包文件中的业务组件和功能函数;
从获取到的所述功能函数中查找可支持所述业务组件的功能函数;
在上述查找结果为空时,补充支持所述业务组件的功能函数。
第二方面,本发明实施例还提供了一种安卓应用校验装置,包括:
打包文件获取模块,用于确定安卓应用打包完成,得到打包文件;
获取模块,用于获取所述打包文件中的业务组件和功能函数;
查找模块,用于从获取到的所述功能函数中查找可支持所述业务组件的功能函数;
补充模块,用于在上述查找结果为空时,补充支持所述业务组件的功能函数。
第三方面,本发明实施例还提供了一种计算机设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如本发明第一方面提供的安卓应用校验方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明第一方面提供的安卓应用校验方法。
本发明实施例提供的安卓应用校验方法,在安卓应用打包完成后,得到打包文件,获取打包文件中的业务组件和功能函数,从获取到的功能函数中查找可支持业务组件的功能函数,在上述查找结果为空时,补充支持业务组件的功能函数。在安卓应用发布后,用户从应用商店下载安装,在运行安卓应用过程中,由于应用程序中各业务组件均具有支持的功能函数,因此,不会出现由于函数的支持问题导致的异常错误,提高了安卓应用程序的稳定性。
附图说明
图1为本发明实施例一提供的一种安卓应用校验方法的流程图;
图2A为本发明实施例二提供的一种安卓应用校验方法的流程图;
图2B为本发明实施例提供的一种获取打包文件中Java层的本地方法和C函数层的C函数的流程示意图;
图3为本发明实施例三提供的安卓应用校验装置的结构示意图;
图4为本发明实施例四提供的一种计算机设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
如前文所述,目前,安卓应用程序在运行过程中经常会出现由于函数的支持问题导致异常错误,从而导致整个应用进程崩溃。经发明人研究发现,出现这种异常错误主要是由于应用程序中用于实现业务功能的业务组件没有支撑的功能函数。而功能函数所在的安卓的软件开发工具包(Software Development Kit,SDK)大多为动态库,动态库在程序编译时并不会被连接到功能函数,而是在程序运行是才被载入。因此,如果业务组件没有对应的功能函数,在安卓应用的编译过程中,不会出现任何异常错误。在安卓应用程序发布后,安卓应用程序运行过程中,当需要启用某业务功能(例如,支付功能)而对应的执行业务组件时,则需要调用对应的功能函数,由于该业务组件没有对应的功能函数,从而在调用时就会抛出上述异常错误,导致整个应用进程崩溃。
针对上述问题,本发明实施例提供了一种安卓应用校验方法,能够在安卓应用发布之前对应用程序中的业务组件和功能函数进行校验,在业务组件缺乏支持的功能函数时,在应用程序中补充支持业务组件的功能函数,避免安卓应用程序在运行过程中出现异常错误,导致应用程序崩溃的问题,提高了安卓应用程序的稳定性。
图1为本发明实施例一提供的一种安卓应用校验方法的流程图,本实施例可适用于在安卓应用发布之前对应用程序中的业务组件和功能函数进行校验,避免安卓应用程序在运行过程中,由于业务组件缺乏支持的功能函数而出现异常错误情况,该方法可以由本发明实施例提供的安卓应用校验装置来执行,该装置可以由软件和/或硬件的方式实现,通常配置于计算机设备中,如图1所示,该方法具体包括如下步骤:
S101、确定安卓应用打包完成,得到打包文件。
安卓应用通常通过Android Studio或Gradle进行编译,本发明实施例在此不做限定。安卓应用的代码通常是用Java编写的,使用javac命令将Java源代码文件编译为class文件。class文件包含标准的Oracle JVM Java字节码。但安卓设备不使用此字节码格式。相反,安卓有自己独特的字节码格式,称为Dalvik。Dalvik字节码与Oracle JVM Java字节码一样,是理论处理器的机器代码指令。编译过程中通过dx命令将class文件和任何jar库转换为包含Dalvik字节码的单个classes.dex文件。dx命令将所有class和jar文件拼接成一个以Dalvik字节码格式编写的classes.dex文件。然后通过Android Asset PackagingTool或aapt将classes.dex文件和安卓应用中的资源(如图像和布局)打包为类似zip的文件,称为Android Package或APK文件(即打包文件)。
在上述编译过程中,可以通过编译任务反馈,确定安卓应用是否打包完成。例如,APK文件打包完成后,反馈一个表示打包任务完成的反馈信号,进而确定安卓应用打包完成,并获取该打包文件。
S102、获取打包文件中的业务组件和功能函数。
示例性的,在本发明实施例中,可以对打包文件进行反编译,例如,通过AndroidApktool对打包文件进行反编译,得到打包文件中的业务组件和功能函数,以及图片、XML配置、语言资源等文件。
在应用程序的开发过程中,随着开发人员的增多及功能的增加,如果提前没有使用合理的开发架构,代码会变得臃肿,功能间代码耦合也会越来越严重。在更改某一业务的代码时,可能会影响其他业务。因此,通常在应用程序开发过程中,按照功能模块进行拆分,每个功能模块就是一个业务组件,例如,直播组件、支付组件等。功能函数用于支持业务组件,在业务组件被执行时,调用对应的功能函数,从而实现业务组件对用的功能。
S103、从获取到的功能函数中查找可支持业务组件的功能函数。
在本发明实施例中,对于获取到的业务组件和功能函数,将业务组件和功能函数进行一一对照校验。具体的,针对每一业务组件,从获取到的功能函数中查找可支持该业务组件的功能函数。
如前文所述,安卓应用程序在运行过程中经常会出现由于函数的支持问题导致异常错误的原因为:用于实现业务功能的业务组件没有支撑的功能函数,因此,在本发明实施例中,通过获取打包文件中业务组件和功能函数,并从获取到的功能函数中查找可支持业务组件的功能函数,判断每一个业务组件是否都有支持该业务组件的功能函数。
S104、在上述查找结果为空时,补充支持业务组件的功能函数。
具体的,在上述查找结果为空时,也即某一业务组件缺少对应的功能函数时,向打包文件中补充支持该业务组件的功能函数。
在补充支持业务组件的功能函数之后,可以通过Android Asset Packaging Tool或aapt将classes.dex文件和安卓应用中的资源(如图像和布局)重新打包为APK文件。然后使用标准的jarsigner工具给APK文件签名,并发布到应用商店(例如,Google Play应用商店),这有助于安卓确保APK的任何将来更新都是原版更新并来自原始作者。对APK文件进行签名意味着在APK文件中存储了一个附加文件,该文件基于APK内容的校验和以及单独生成的私钥。为了确保文件的压缩部分按字节对齐,以便安卓***可以轻松读取它们而无需解压缩文件,通常还需要通过名为zipalign的工具运行APK文件,确保文件的压缩部分在字节边界上排列。
本发明实施例提供的安卓应用校验方法,在安卓应用打包完成后,得到打包文件,获取打包文件中的业务组件和功能函数,从获取到的功能函数中查找可支持业务组件的功能函数,在上述查找结果为空时,补充支持业务组件的功能函数。在安卓应用发布后,用户从应用商店下载安装,在运行安卓应用过程中,由于应用程序中各业务组件均具有支持的功能函数,因此,不会出现由于函数的支持问题导致的异常错误,提高了安卓应用程序的稳定性。
实施例二
图2A为本发明实施例二提供的一种安卓应用校验方法的流程图,本实施例在前述实施例一的基础上,详细描述了上述实施例中各步骤的详细过程,如图2A所示,该方法包括:
S201、在安卓应用编译期间,查找打包任务完成标识符。
示例性的,通过Gradle进行编译,首先使用javac命令将Java源代码文件编译为class文件,接着通过dx命令将class文件和任何jar库转换为包含Dalvik字节码的单个classes.dex文件,然后,通过Android Asset Packaging Tool或aapt将classes.dex文件和安卓应用中的资源(如图像和布局)打包为APK文件(即打包文件)。
具体的,在上述安卓应用编译过程中,Gradle会向处理器反馈任务进度信息,反馈信息包含各任务开始或完成时的标识符,用于表示该任务开始或完成。例如,当打包任务完成后,反馈信息包含打包任务完成标识符zipApksForDebug或zipApksForRelease,在查找到打包任务完成标识符时,即可确定安卓应用打包任务完成。
S202、在查找到打包任务标识符时,确定安卓应用打包完成,得到打包文件。
示例性的,在查找到打包任务标识符zipApksForDebug或zipApksForRelease时,确定安卓应用打包完成,并得到打包文件。
S203、获取打包文件中的业务组件和功能函数。
安卓***的应用程序通常基于Java进行开发和编译,应用程序中的业务组件通常表现为Java层中的本地方法(Native Method)。本地方法是由其它语言编写的,编译成和处理器相关的机器代码,是一个Java调用非Java代码的接口。Java使用起来非常方便,然而有些层次的任务用Java实现起来不容易,例如,Java需要与一些底层***如操作***或某些硬件交换信息时的情况。由于底层***通常由C语义编译而成,在这种情况下,在执行本地方法时,需要调用C函数层中实现该本地方法的C函数,使得Java与底层***的交互更便捷。
而C函数层所在的安卓的软件开发工具包(Software Development Kit,SDK)大多为动态库,动态库在程序编译时并不会被连接到C函数层中的C函数,而是在程序运行是才被载入。因此,如果本地方法在C函数层没有对应的实现函数,在安卓应用的编译过程中,不会出现任何异常错误。在安卓应用程序发布后,安卓应用程序运行过程中,当需要执行本地方法时,则需要调用C函数层中与该本地方法对应的C函数,由于该本地方法在C函数层没有对应的C函数,从而在调用时就会抛出异常错误(例如,Java.lang.UnsatisfiedLinkError),导致整个应用进程崩溃。
因此,获取打包文件中的业务组件和功能函数,即获取打包文件中Java层的本地方法和C函数层的C函数。
示例性的,在本发明实施例中,可以对打包文件进行反编译,例如,通过AndroidApktool对打包文件进行反编译,得到打包文件中Java层的本地方法和C函数层中的C函数,以及图片、XML配置、语言资源等文件。
图2B为本发明实施例提供的一种获取打包文件中Java层的本地方法和C函数层的C函数的流程示意图,示例性的,如图2B所示,获取打包文件中Java层的本地方法和C函数层的C函数,包括如下步骤:
S2031、获取打包文件中的dex文件和so文件。
示例性的,可以对打包文件进行反编译,例如,通过Android Apktool对打包文件进行反编译,得到打包文件中的dex文件和so文件,以及图片、XML配置、语言资源等文件。
其中,dex是Android平台上Dalvik虚拟机的可执行文件,里面包含了该app的所有源码,通过反编译工具可以获取到相应的Java源码。so文件是动态连接库,是二进制文件,即ELF文件,作用相当于windows下的.dll文件。so文件是一个C的函数库,包含有打包好的C函数,以供本地方法调用。
S2032、从dex文件中查找本地方法。
从dex文件中查找出所有本地方法。具体的,所有方法均包括一个描述符,用于表示该方法的类型,例如本地方法包括一个名为Native的描述符。因此,在本发明实施例中,可以通过DexClassLoader加载dex文件,找到所有方法类型,并对所有方法进行解析,确定所有方法的结构,并将描述符为Native的方法作为本地方法。
S2033、从so文件中查找以Java开头的目标C函数。
从so文件中查找所有C函数,并从中确定以Java开头的目标C函数。具体的,用于实现本地方法的C函数都以Java开头。因此,在本发明实施例中,可以加载so文件,并对所有函数进行解析,确定所有函数的结构,并将以Java开头的C函数作为目标C函数。通过从so文件中查找以Java开头的目标C函数,滤除不是以Java开头的C函数,减少后续从C函数层中查找与本地方法对应的C函数的工作量,提高查找效率。
示例性的,可以直接通过System.loadLibrary方法加载libs目录下的默认so文件,也可以使用System.load方法,加载指定目录下的so文件,本发明实施例在此不做限定。
S204、根据业务组件确定支持业务组件的功能函数的文件路径和函数名称。
示例性的,业务组件与对应的功能函数具有特定的命名规则,通过业务组件的名称即可确定支持业务组件的功能函数的文件路径和函数名称。
在本发明具体实施例中,如前文所述,业务组件表现为Java层中的本地方法,功能函数表现为C函数层中C函数。因此,根据业务组件确定支持业务组件的功能函数的文件路径和函数名称,即根据本地方法确定实现本地方法的C函数的文件路径和函数名称。
示例性的,本地方法与对应的C函数具有特定的命名规则,通过本地方法的名称即可确定实现本地方法的C函数的文件路径和函数名称。示例性的,以getSymsBySoName这个带有Native描述符的本地方法为例,它在so文件中的实现函数为Java_com_huya_mtp_symbolkit_symbol_jni_ELFJni_getSymsBySoName。其中,com_huya_mtp_symbolkit_symbol_jni为文件路径,ELFJni为类名称,getSymsBySoName为函数名称。
S205、在获取到的功能函数中查找同时包含文件路径和函数名称的功能函数。
如前文所述,业务组件与对应的功能函数具有特定的命名规则,通过业务组件的名称即可确定支持业务组件的功能函数的文件路径和函数名称,然后在获取到的功能函数中查找同时包含文件路径和函数名称的功能函数。在本发明具体实施例中,如前文所述,业务组件表现为Java层中的本地方法,功能函数表现为C函数层中C函数。因此,在获取到的功能函数中查找同时包含文件路径和函数名称的功能函数,即从C函数中查找同时包文件路径和函数名称的C函数。
示例性的,在上述步骤中得到所有本地方法和以Java开头的目标C函数。在本发明的一些实施例中,为了便于查找,可以建立本地方法表和C函数表,所有本地方法均存储在本地方法表中,所有目标C函数均存储在C函数表中。
如前文所述,本地方法如果在so文件中具有可实现的C函数,那么该C函数具有如前文所述的特定的命名规则,通过本地方法的名称即可确定实现本地方法的C函数的文件路径和函数名称。因此,可以基于本地方法的名称,从C函数表中查找同时包含文件路径和函数名称的C函数。
S206、在上述查找结果为空时,根据业务组件确定支持业务组件的功能函数和功能函数的文件路径。
具体的,在上述查找结果为空时,也即某一业务组件缺少对应的功能函数时,根据业务组件确定支持业务组件的功能函数和功能函数的文件路径。在本发明具体实施例中,也即在C函数表查找不到同时包含本地方法对应的文件路径和函数名称的C函数时,根据该本地方法确定实现该本地方法的C函数的文件路径和函数名称。
在本发明的一些实施例中,在上述查找结果为空时,发出错误提示。示例性的,错误提示可以以文字加提示音的形式进行反馈,文字部分包括没有可实现的C函数的本地方法。在收到错误提示后,根据错误提示中的本地方法确定实现该本地方法的C函数的文件路径和函数名称。
C函数的文件路径和函数名称可以通过本地方法确定,具体的确定过程在前述实施例中已有详细记载,本发明实施例在此不做赘述。
S207、将功能函数添加至文件路径中。
对缺少功能函数的业务组件进行补充,将功能函数添加至对应的文件路径中。在本发明具体实施例中,将实现本地方法的C函数添加至对应的文件路径中。在运行安卓应用过程中,由于应用程序中Java层定义的本地方法在C函数层均有实现的C函数,因此,不会出现因函数支持问题导致的异常错误,提高了安卓应用程序的稳定性。
在根据错误提示在C函数层中补充实现本地方法的C函数之后,可以通过AndroidAsset Packaging Tool或aapt将classes.dex文件和安卓应用中的资源(如图像和布局)重新打包为APK文件。然后使用标准的jarsigner工具给APK文件签名,并发布到应用商店(例如,Google Play应用商店),这有助于安卓确保APK的任何将来更新都是原版更新并来自原始作者。对APK文件进行签名意味着在APK文件中存储了一个附加文件,该文件基于APK内容的校验和以及单独生成的私钥。为了确保文件的压缩部分按字节对齐,以便安卓***可以轻松读取它们而无需解压缩文件,通常还需要通过名为zipalign的工具运行APK文件,确保文件的压缩部分在字节边界上排列。
本发明实施例提供的安卓应用校验方法,通过获取打包文件中的dex文件和so文件,并对dex文件和so文件进行解析,从dex文件中查找本地方法,从so文件中查找以Java开头的目标C函数,并查找实现本地方法的目标C函数,在不存在实现本地方法的C函数时,发出错误提示,并根据错误提示在C函数层中补充实现本地方法的C函数。在安卓应用发布后,用户从应用商店下载安装,在运行安卓应用过程中,由于应用程序中Java层定义的本地方法在C函数层均有实现的C函数,因此,不会出现因函数支持问题导致的异常错误,提高了安卓应用程序的稳定性。
实施例三
图3为本发明实施例三提供的安卓应用校验装置的结构示意图,如图3所示,该装置包括:
打包文件获取模块301,用于确定安卓应用打包完成,得到打包文件;
获取模块302,用于获取所述打包文件中的业务组件和功能函数;
查找模块303,用于从获取到的所述功能函数中查找可支持所述业务组件的功能函数;
补充模块304,用于在上述查找结果为空时,补充支持所述业务组件的功能函数。
在本发明的一些实施例中,打包文件获取模块301包括:
标识符查找子模块,用于在安卓应用编译期间,查找打包任务完成标识符;
打包文件获取子模块,用于在查找到所述打包任务标识符时,确定所述安卓应用打包完成,得到打包文件。
在本发明的一些实施例中,所述业务组件包括Java层的本地方法,所述功能函数包括C函数层的C函数,获取模块302包括:
获取子模块,用于获取所述打包文件中Java层的本地方法和C函数层的C函数。
在本发明的一些实施例中,获取子模块包括:
获取单元,用于获取所述打包文件中的dex文件和so文件;
本地方法查找单元,用于从所述dex文件中查找本地方法;
目标C函数查找单元,用于从所述so文件中查找以Java开头的目标C函数。
在本发明的一些实施例中,本地方法查找单元包括:
第一解析子单元,用于从所述dex文件中解析出所有方法类型;
第一查找子单元,用于从所有方法类型中查找描述符为Native的方法作为本地方法。
在本发明的一些实施例中,目标C函数查找单元包括:
第二解析子单元,用于从所述so文件中解析出所有函数类型;
第二查找子单元,用于从所有函数类型中查找以Java开头的函数符号的C函数作为目标C函数。
在本发明的一些实施例中,查找模块303包括:
第一确定子模块,用于根据所述本地方法确定实现所述本地方法的C函数的文件路径和函数名称;
查找子模块,用于在获取到的所述功能函数中查找同时包含所述文件路径和所述函数名称的功能函数。
在本发明的一些实施例中,补充模块305包括:
第二确定子模块,用于根据所述业务组件确定支持所述业务组件的功能函数和所述功能函数的文件路径;
添加子模块,用于将所述功能函数添加至所述文件路径中。
上述安卓应用校验装置可执行本发明任意实施例所提供的安卓应用校验方法,具备执行方法相应的功能模块和有益效果。
实施例四
本发明实施例四提供了一种计算机设备,图4为本发明实施例四提供的一种计算机设备的结构示意图,如图4所示,该计算机设备包括:
处理器401、存储器402、通信模块403、输入装置404和输出装置405;移动终端中处理器401的数量可以是一个或多个,图4中以一个处理器401为例;移动终端中的处理器401、存储器402、通信模块403、输入装置404和输出装置405可以通过总线或其他方式连接,图4中以通过总线连接为例。上述处理器401、存储器402、通信模块403、输入装置404和输出装置405可以集成在计算机设备上。
存储器402作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如上述实施例中的安卓应用校验方法对应的模块。处理器401通过运行存储在存储器402中的软件程序、指令以及模块,从而执行计算机设备的各种功能应用以及数据处理,即实现上述的安卓应用校验方法。
存储器402可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需的应用程序;存储数据区可存储根据微型计算机的使用所创建的数据等。此外,存储器402可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器402可进一步包括相对于处理器401远程设置的存储器,这些远程存储器可以通过网络连接至电子设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
通信模块403,用于与外界设备(例如智能终端)建立连接,并实现与外界设备的数据交互。输入装置404可用于接收输入的数字或字符信息,以及产生与计算机设备的用户设置以及功能控制有关的键信号输入。
本实施例提供的一种计算机设备,可执行本发明上述任意实施例提供的安卓应用校验方法,具有相应的功能和有益效果。
实施例五
本发明实施例五提供了一种包含计算机可执行指令的存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明上述任意实施例提供的安卓应用校验方法,该方法包括:
确定安卓应用打包完成,得到打包文件;
获取所述打包文件中的业务组件和功能函数;
从获取到的所述功能函数中查找可支持所述业务组件的功能函数;
在上述查找结果为空时,补充支持所述业务组件的功能函数。
需要说明的是,对于装置、设备和存储介质实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是机器人,个人计算机,服务器,或者网络设备等)执行本发明任意实施例所述的安卓应用校验方法。
值得注意的是,上述装置中,所包括的各个模块、子模块、单元、子单元只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能模块的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行装置执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (9)
1.一种安卓应用校验方法,其特征在于,包括:
确定安卓应用打包完成,得到打包文件;
获取所述打包文件中的业务组件和功能函数;
从获取到的所述功能函数中查找可支持所述业务组件的功能函数;
在上述查找结果为空时,补充支持所述业务组件的功能函数;
所述业务组件包括Java层的本地方法,所述功能函数包括C函数层的C函数,所述获取所述打包文件中的业务组件和功能函数,包括:
获取所述打包文件中Java层的本地方法和C函数层的C函数;
所述获取所述打包文件中Java层的本地方法和C函数层中的C函数,包括:
获取所述打包文件中的dex文件和so文件;
从所述dex文件中查找本地方法;
从所述so文件中查找以Java开头的目标C函数。
2.根据权利要求1所述的安卓应用校验方法,其特征在于,确定安卓应用打包完成,得到打包文件,包括:
在安卓应用编译期间,查找打包任务完成标识符;
在查找到所述打包任务标识符时,确定所述安卓应用打包完成,得到打包文件。
3.根据权利要求1所述的安卓应用校验方法,其特征在于,从所述dex文件中查找本地方法,包括:
从所述dex文件中解析出所有方法类型;
从所有方法类型中查找描述符为Native的方法作为本地方法。
4.根据权利要求1所述的安卓应用校验方法,其特征在于,从所述so文件中查找以Java开头的目标C函数,包括:
从所述so文件中解析出所有函数类型;
从所有函数类型中查找以Java开头的函数符号的C函数作为目标C函数。
5.根据权利要求1-4任一所述的安卓应用校验方法,其特征在于,从获取到的所述功能函数中查找可支持所述业务组件的功能函数,包括:
根据所述业务组件确定支持所述业务组件的功能函数的文件路径和函数名称;
在获取到的所述功能函数中查找同时包含所述文件路径和所述函数名称的功能函数。
6.根据权利要求1-4任一所述的安卓应用校验方法,其特征在于,在上述查找结果为空时,补充支持所述业务组件的功能函数,包括:
根据所述业务组件确定支持所述业务组件的功能函数和所述功能函数的文件路径;
将所述功能函数添加至所述文件路径中。
7.一种安卓应用校验装置,其特征在于,包括:
打包文件获取模块,用于确定安卓应用打包完成,得到打包文件;
获取模块,用于获取所述打包文件中的业务组件和功能函数;
查找模块,用于从获取到的所述功能函数中查找可支持所述业务组件的功能函数;
补充模块,用于在上述查找结果为空时,补充支持所述业务组件的功能函数;
所述业务组件包括Java层的本地方法,所述功能函数包括C函数层的C函数,所述获取模块包括:
获取子模块,用于获取所述打包文件中Java层的本地方法和C函数层的C函数;
所述获取子模块包括:
获取单元,用于获取所述打包文件中的dex文件和so文件;
本地方法查找单元,用于从所述dex文件中查找本地方法;
目标C函数查找单元,用于从所述so文件中查找以Java开头的目标C函数。
8.一种计算机设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-6中任一所述的安卓应用校验方法。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-6中任一所述的安卓应用校验方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110820109.XA CN113535566B (zh) | 2021-07-20 | 2021-07-20 | 一种安卓应用校验方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110820109.XA CN113535566B (zh) | 2021-07-20 | 2021-07-20 | 一种安卓应用校验方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113535566A CN113535566A (zh) | 2021-10-22 |
CN113535566B true CN113535566B (zh) | 2024-06-21 |
Family
ID=78129021
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110820109.XA Active CN113535566B (zh) | 2021-07-20 | 2021-07-20 | 一种安卓应用校验方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113535566B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108491327A (zh) * | 2018-03-26 | 2018-09-04 | 中南大学 | 一种安卓应用动态Receiver组件本地拒绝服务漏洞检测方法 |
CN109948338A (zh) * | 2019-03-19 | 2019-06-28 | 中南大学 | 基于静态分析的安卓应用敏感路径触发方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170046438A1 (en) * | 2015-08-13 | 2017-02-16 | Quixey, Inc. | Cloud-Enabled Caching Architecture for On-Demand Native Application Crawling |
CN106383785B (zh) * | 2016-09-21 | 2018-11-27 | 网易(杭州)网络有限公司 | 移动应用的调试方法及装置 |
CN106650341A (zh) * | 2016-11-18 | 2017-05-10 | 湖南鼎源蓝剑信息科技有限公司 | 基于smali流程混淆技术的Android应用加固方法 |
CN108920220B (zh) * | 2018-06-06 | 2021-11-30 | 北京奇虎科技有限公司 | 一种函数调用的方法、装置及终端 |
CN111143869B (zh) * | 2019-12-30 | 2023-07-14 | Oppo广东移动通信有限公司 | 应用程序包处理方法、装置、电子设备及存储介质 |
-
2021
- 2021-07-20 CN CN202110820109.XA patent/CN113535566B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108491327A (zh) * | 2018-03-26 | 2018-09-04 | 中南大学 | 一种安卓应用动态Receiver组件本地拒绝服务漏洞检测方法 |
CN109948338A (zh) * | 2019-03-19 | 2019-06-28 | 中南大学 | 基于静态分析的安卓应用敏感路径触发方法 |
Also Published As
Publication number | Publication date |
---|---|
CN113535566A (zh) | 2021-10-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9811360B2 (en) | Dynamic determination of application server runtime classloading | |
US6571388B1 (en) | Building a custom software environment including pre-loaded classes | |
US7263699B2 (en) | Preparation of a software configuration using an XML type programming language | |
CN111399840B (zh) | 一种模块开发方法及装置 | |
KR100871778B1 (ko) | 중앙집중형 동적 어드레싱 매니저를 이용한 동적 어드레싱방법 및 장치 | |
CN111930382B (zh) | 应用页面的接入方法、装置及设备 | |
CN113407362A (zh) | 基于车载Android***SOA架构SOMEIP通信中间层实现方法及*** | |
CN110333872B (zh) | 一种应用的处理方法、装置、设备和介质 | |
CN116401003A (zh) | 基于桌面操作***的安卓应用运行方法、***及存储介质 | |
KR101117165B1 (ko) | 이기종 운영체제 계층 모듈에서 동작하는 웹기반어플리케이션의 연동이 가능한 모바일 단말기용 웹 플랫폼 유닛 | |
CN117075960B (zh) | 程序重构方法、应用跨平台迁移方法、装置与计算设备 | |
CN110941443B (zh) | 修改sdk中文件名的方法、装置及电子设备 | |
CN106775916B (zh) | 减小应用安装包的方法、装置及电子设备 | |
CN113535566B (zh) | 一种安卓应用校验方法、装置、设备及存储介质 | |
CN112416418A (zh) | 应用组件的生成方法、装置、计算机设备和可读存储介质 | |
CN112416612A (zh) | 服务调用方法、装置、计算机设备和可读存储介质 | |
CN111090425A (zh) | 一种程序封装方法、装置及电子设备 | |
CN106778270B (zh) | 一种恶意应用程序的检测方法及*** | |
CN115510505A (zh) | 应用文件的打包方法、装置、电子设备及可读存储介质 | |
US20160019040A1 (en) | Method for automatically converting android application to tizen installable package | |
CN110502251B (zh) | 应用安装方法及装置 | |
CN111338633B (zh) | 免安装文件生成方法、装置及电子设备 | |
CN113641389A (zh) | 基于OpenCPU的软件升级方法、装置及设备 | |
CN111273940B (zh) | 将程序文件上传至代码仓库的方法及装置 | |
WO2019157891A1 (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 |