CN112988592B - 代码检测方法、装置、设备和存储介质 - Google Patents

代码检测方法、装置、设备和存储介质 Download PDF

Info

Publication number
CN112988592B
CN112988592B CN202110372232.XA CN202110372232A CN112988592B CN 112988592 B CN112988592 B CN 112988592B CN 202110372232 A CN202110372232 A CN 202110372232A CN 112988592 B CN112988592 B CN 112988592B
Authority
CN
China
Prior art keywords
class
class information
code detection
application
application program
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
CN202110372232.XA
Other languages
English (en)
Other versions
CN112988592A (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.)
Beijing ByteDance Network Technology Co Ltd
Original Assignee
Beijing ByteDance Network Technology 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 Beijing ByteDance Network Technology Co Ltd filed Critical Beijing ByteDance Network Technology Co Ltd
Priority to CN202110372232.XA priority Critical patent/CN112988592B/zh
Publication of CN112988592A publication Critical patent/CN112988592A/zh
Application granted granted Critical
Publication of CN112988592B publication Critical patent/CN112988592B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3676Test management for coverage analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

本公开实施例涉及一种代码检测方法、装置、设备和存储介质。该方法包括:在待检测的应用程序的运行过程中,调用加载类信息输出函数,输出加载类信息至预设输出流;从所述预设输出流中筛选属于所述应用程序的应用加载类信息;将所述应用程序对应的代码检测信息发送至服务端;其中,所述代码检测信息包括所述应用加载类信息,或者基于所述应用加载类信息和所述应用程序的安装包确定的代码检测结果。通过上述技术方案,既能更加快捷、高效地分析出应用程序源代码中的废弃代码,又能提高代码检测的普适性。

Description

代码检测方法、装置、设备和存储介质
技术领域
本公开涉及计算机技术领域,尤其涉及一种代码检测方法、装置、设备和存储介质。
背景技术
随着业务的扩展,诸多客户端都存在版本不断更新的情况,而每次版本更新都会对应用源代码进行变更,使得应用源代码中存在大量的废弃逻辑,这些废弃逻辑的代码主要是通过代码覆盖率检测方法予以发现并清理。
目前,主流的代码覆盖率检测方法为静态字节码插桩方法,其核心手段是在代码中所有类class的初始化方法(也就是static块)中加入埋点统计,以便每个类class在被调用时会被统计到已经使用了,进而发现安装包中所有没有被调用到的类class。但是,该方案需要在安装包中新增大量统计代码,反而会造成应用性能与包体积的极度劣化。也正因此,该方案目前只能用于线下测试场景,无法被集成到线上实际应用,进而无法根据用户真实使用场景获取客户端实际的废弃业务逻辑信息。
发明内容
为了解决上述技术问题,本公开提供了一种代码检测方法、装置、设备和存储介质。
本公开实施例提供了一种代码检测方法,该方法包括:
在待检测的应用程序的运行过程中,调用加载类信息输出函数,输出加载类信息至预设输出流;
从所述预设输出流中筛选属于所述应用程序的应用加载类信息;
将所述应用程序对应的代码检测信息发送至服务端;其中,所述代码检测信息包括所述应用加载类信息,或者基于所述应用加载类信息和所述应用程序的安装包确定的代码检测结果。
在一些实施例中,所述调用加载类信息输出函数,输出加载类信息至预设输出流包括:
针对每个被加载的类,以所述预设输出流为输入参数,调用预设转储类函数,将相应类的加载类信息输出至所述预设输出流;其中,所述预设转储类函数通过预先对原生转储类函数进行封装而获得。
在一些实施例中,在于,所述加载类信息包括类名称和类加载器地址。
在一些实施例中,所述从所述预设输出流中筛选属于所述应用程序的应用加载类信息包括:
基于所述预设输出流中的各类的类加载器地址,从所述预设输出流中筛选属于所述应用程序的应用加载类信息。
进一步地,所述基于所述预设输出流中的各类的类加载器地址,从所述预设输出流中筛选属于所述应用程序的应用加载类信息包括:
基于系统类的类加载器地址的标识和所述预设输出流中的各所述类的类加载器地址,从所述预设输出流中删除属于系统类的加载类信息,获得所述应用加载类信息。
在一些实施例中,所述将所述应用程序对应的代码检测信息发送至服务端包括:
将所述应用加载类信息发送至所述服务端,以使所述服务端基于所述应用加载类信息和所述应用程序的安装包确定所述代码检测结果。
在一些实施例中,基于所述应用加载类信息和所述应用程序的安装包确定代码检测结果包括:
比较所述应用加载类信息中的类和所述安装包中的类,确定在当前用户操作下未被加载的类,作为当前用户对应的代码检测结果。
本公开实施例还提供了一种代码检测装置,该装置包括:
加载类信息输出模块,用于在待检测的应用程序的运行过程中,调用加载类信息输出函数,输出加载类信息至预设输出流;
应用加载类信息筛选模块,用于从所述预设输出流中筛选属于所述应用程序的应用加载类信息;
代码检测信息发送模块,用于将所述应用程序对应的代码检测信息发送至服务端;其中,所述代码检测信息包括所述应用加载类信息,或者基于所述应用加载类信息和所述应用程序的安装包确定的代码检测结果。
在一些实施例中,应用加载类信息筛选模块具体用于:
针对每个被加载的类,以预设输出流为输入参数,调用预设转储类函数,将相应类的加载类信息输出至预设输出流;其中,预设转储类函数通过预先对原生转储类函数进行封装而获得。
在一些实施例中,加载类信息包括类名称和类加载器地址。
进一步地,应用加载类信息筛选模块具体用于:
基于预设输出流中的各类的类加载器地址,从预设输出流中筛选属于应用程序的应用加载类信息。
进一步地,应用加载类信息筛选模块具体用于:
基于系统类的类加载器地址的标识和预设输出流中的各类的类加载器地址,从预设输出流中删除属于系统类的加载类信息,获得应用加载类信息。
在一些实施例中,代码检测信息发送模块具体用于:
将所述应用加载类信息发送至所述服务端,以使所述服务端基于所述应用加载类信息和所述应用程序的安装包确定所述代码检测结果。
在一些实施例中,代码检测信息发送模块具体用于:
比较应用加载类信息中的类和安装包中的类,确定在当前用户操作下未被加载的类,作为当前用户对应的代码检测结果。
本公开实施例还提供了一种的电子设备,该电子设备包括:
处理器和存储器;
所述处理器通过调用所述存储器存储的程序或指令,用于执行本公开任意实施例中所述方法的步骤。
本公开实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储程序或指令,所述程序或所述指令使计算机执行本公开任意实施例中所述方法的步骤。
本公开实施例提供的代码检测方案,通过在待检测的应用程序的运行过程中,调用加载类信息输出函数,输出加载类信息至预设输出流;从预设输出流中筛选属于应用程序的应用加载类信息;将应用程序对应的代码检测信息发送至服务端;其中,代码检测信息包括应用加载类信息,或者基于应用加载类信息和应用程序的安装包确定的代码检测结果;实现了只在应用程序安装包中增加一行调用加载类信息输出函数的代码,便可利用加载类信息输出函数来获得应用程序运行过程中被加载的应用加载类信息,进而获得当前用户操作对应的代码检测结果,既能更加快捷、高效地分析出应用程序源代码中的废弃代码,又能提高代码检测的普适性。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本公开实施例提供的一种代码检测方法的流程示意图;
图2为本公开实施例提供的一种代码检测装置的结构示意图;
图3为本公开实施例提供的一种电子设备的结构示意图。
具体实施方式
为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步的详细描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。
本公开实施例提供的代码检测方法,主要适用于应用程序中废弃代码的检测场景,具体地,本公开的实施例以安卓系统应用程序为例,并不构成对本公开的限制。本公开实施例提供的代码检测方法可以由代码检测装置来执行,该装置可以由软件和/或硬件的方式实现,该装置可以集成在能够安装应用程序的电子设备中,例如手机、掌上电脑、平板电脑、笔记本电脑、台式电脑或服务器等。
图1是本公开实施例提供的一种代码检测方法的流程图。参见图1,该代码检测方法具体包括:
S110、在待检测的应用程序的运行过程中,调用加载类信息输出函数,输出加载类信息至预设输出流。
其中,加载类信息输出函数是电子设备所搭载的运行系统提供的原生函数,其用于输出已被加载的类的相关信息(即加载类信息)。具体地,本公开的实施例以运行系统为安卓(Android)系统,加载类信息输出函数为安卓系统提供的原生函数Debug.printLoadedClasses()为例,并不构成对本公开的限制。预设输出流是指自定义的输出流,其为非原生的日志文件,例如可以是自定义的非日志文件的输出流,也可以是自定义的、独立于原生的系统日志文件的其他日志文件等。
具体地,Android系统提供的加载类信息输出函数默认将应用程序运行过程中所有被加载的类(class)的加载类信息输出到原生的系统日志文件。而原生的系统日志文件中包含大量的记录信息,如果从该原生的系统日志文件中筛选出应用程序运行过程中被使用到的类的加载类信息,那么就会涉及到大量的文件信息检索与匹配操作,效率会非常低下。所以,为了提高应用程序对应的加载类信息的获取效率,本公开实施例中对加载类信息输出函数的内部实现进行修改,以便其可以将应用程序运行过程中所有被加载的类class的加载类信息输出至预设输出流。
具体实施时,本公开实施例在应用程序的安装包的合适位置处添加调用修改后的加载类信息输出函数的一行代码。当应用程序启动并运行至该行代码时,会调用修改后的加载类信息输出函数,进而获得函数运行结果,即将应用程序运行过程中所有被加载的类class的加载类信息输出到预设输出流。
需要说明的是,如果客户端是软件或者系统等应用程序综合体,那么可以将客户端拆分为各个应用程序,并对每个应用程序采用本公开提供的代码检测方法,便可获得客户端的代码检测结果。
在一些实施例中,调用加载类信息输出函数,输出加载类信息至预设输出流包括:针对每个被加载的类,以预设输出流为输入参数,调用预设转储类函数,将相应类的加载类信息输出至预设输出流;其中,预设转储类函数通过预先对原生转储类函数进行封装而获得。
具体地,以安卓系统为例,将加载类信息输出至预设输出流的过程为:针对应用程序运行过程中每个被加载的类,调用Android Native层的预设转储类函数,即Class::DumpClass(std::ostream&os,int flags),来输出其加载类信息至预设输出流。
由于在调用加载类信息输出函数(Debug.printLoadedClasses)以获取当前所有类加载情况时无法直接调用原生转储类函数(Class::DumpClass)的方法或配置修改其参数,所以,为了能够截获输出的加载类信息,本公开实施例中对Android系统提供的原生转储类函数进行再次封装,并提供调用接口,该调用接口中可传入预设输出流作为函数输入参数。这样,便可调用原生转储类函数,且能修改其输出位置为预设输出流。
预设转储类函数的另一输入参数flags由加载类信息输出函数传入,其取值决定了输出的加载类信息中包含的信息量。在一些实施例中,加载类信息包括类名称和类加载器地址。本实施例中,flags取值为1,其在Android系统中的含义是“输出类class名称及其对应的类加载器ClassLoader地址”。这样,预设转储类函数Class::DumpClass()在被调用后,预设输出流中就包含了相应加载类的class名称及其对应的ClassLoader地址,而避免其他更多的类的信息的输出,简化后续代码检测过程,进一步提高代码检测效率。
需要说明的是,加载类信息输出函数的实现中可以只调用一次预设转储类函数,仅将加载类信息输出至预设输出流;也可以在此基础上再次调用预设转储类函数,并将其输入参数设置为系统日志文件,以便将加载类信息输出至系统日志文件,兼容原有逻辑。
S120、从预设输出流中筛选属于应用程序的应用加载类信息。
具体地,应用程序运行过程中,除了会加载应用程序专有的类之外,还会加载系统级别的类,所以预设输出流中包含了应用程序级别的应用类和系统级别的系统类的加载类信息。而应用程序的代码检测只针对应用类,故需要对预设输出流进行进一步处理,以便只获得应用类的加载类信息,即应用加载类信息。
在一些实施例中,从预设输出流中筛选属于应用程序的应用加载类信息包括:基于预设输出流中的各类的类加载器地址,从预设输出流中筛选属于应用程序的应用加载类信息。具体地,可以针对应用类和系统类的类加载器地址的差异,从预设输出流中筛选应用加载类信息。
在一些实施例中,基于预设输出流中的各类的类加载器地址,从预设输出流中筛选属于应用程序的应用加载类信息包括:基于系统类的类加载器地址的标识和预设输出流中的各类的类加载器地址,从预设输出流中删除属于系统类的加载类信息,获得应用加载类信息。具体地,以安卓系统为例,系统类的ClassLoader地址中均包含“0x0”字符串,而应用类的ClassLoader地址不包含该“0x0”字符串。所以,本实施例中可以将“0x0”字符串作为系统类的类加载器地址的标识,并基于此标识遍历预设输出流中的各个类的加载类信息。如果某个类的加载类信息中包含该标识,便认为该类为系统类,将其加载类信息从预设输出流中删除;反之,认为该类为应用类,保留其加载类信息。经过上述处理,预设输出流中只会保留应用加载类信息。这样可以简化应用加载类信息的筛选流程,进一步提高代码检测效率。
S130、将应用程序对应的代码检测信息发送至服务端;其中,代码检测信息包括应用加载类信息,或者基于应用加载类信息和应用程序的安装包确定的代码检测结果。
具体地,预设输出流中各应用加载类信息是本次应用程序运行所用到的类的信息,将其与应用程序安装包中包含的所有类的信息进行比较,便可确定出本次应用程序运行中未用到的类,即在当前用户操作下未被加载的类,作为本次代码检测的结果。该确定代码检测结果的过程可以设置在客户端中执行,此时,可将该代码检测结果发送至服务端;该确定代码检测结果的过程也可以设置在服务端中执行,此时可将应用加载类信息发送至服务端。具体的执行端可依据业务需求而设置。
当服务端获得代码检测结果后,服务端基于汇总的多个用户的代码检测结果确定安装包中的废弃代码。本实施例中,服务端在本次流程中只是获得了当前用户对应的代码检测结果。但是,基于单个用户操作而获得的代码检测结果,只能反映出当前用户不使用的业务逻辑,而当前用户不使用的业务逻辑有可能是其他用户会使用到的业务逻辑。所以,不能简单地将当前用户对应的代码检测结果作为废弃的业务逻辑。基于此,服务端可汇总多个用户的代码检测结果,进而通过汇总的代码检测结果来确定出应用程序中未被用到的代码逻辑,尽可能避免有效业务逻辑的误清理,提高废弃代码的检测准确性。
在一些实施例中,将应用程序对应的代码检测信息发送至服务端包括:将应用加载类信息发送至服务端,以使服务端基于应用加载类信息和应用程序的安装包确定代码检测结果。本实施例中,为了简化客户端的处理流程,提高客户端性能,将客户端中所得的应用程序的应用加载类信息发送至服务端。服务端再比较应用加载类信息中的类和该应用程序的安装包中的类,确定在当前用户操作下应用程序中未被加载的类,作为当前用户对应的代码检测结果。
在一些实施例中,基于应用加载类信息和应用程序的安装包确定代码检测结果包括:比较应用加载类信息中的类和应用程序的安装包中的类,确定在当前用户操作下未被加载的类,作为当前用户对应的代码检测结果。本实施例中,将代码检测结果的获取过程设置在客户端,因为客户端中只有该应用程序的安装包,可以避免安装包的检索匹配过程。
本公开实施例的上述技术方案,通过在待检测的应用程序的运行过程中,调用加载类信息输出函数,输出加载类信息至预设输出流;从预设输出流中筛选属于应用程序的应用加载类信息;将应用程序对应的代码检测信息发送至服务端;其中,代码检测信息包括应用加载类信息,或者基于应用加载类信息和应用程序的安装包确定的代码检测结果。实现了只在应用程序安装包中增加一行调用加载类信息输出函数的代码,便可利用加载类信息输出函数来获得应用程序运行过程中被加载的应用加载类信息,进而获得当前用户操作对应的代码检测结果,既能更加快捷、高效地分析出应用程序源代码中的废弃代码,又能提高代码检测的普适性。
图2为本公开实施例提供的一种代码检测装置的结构示意图。如图2所示,该装置包括:
加载类信息输出模块210,用于在待检测的应用程序的运行过程中,调用加载类信息输出函数,输出加载类信息至预设输出流;
应用加载类信息筛选模块220,用于从预设输出流中筛选属于应用程序的应用加载类信息;
代码检测信息发送模块230,用于将应用程序对应的代码检测信息发送至服务端;其中,代码检测信息包括应用加载类信息,或者基于应用加载类信息和应用程序的安装包确定的代码检测结果。
在一些实施例中,应用加载类信息筛选模块220具体用于:
针对每个被加载的类,以预设输出流为输入参数,调用预设转储类函数,将相应类的加载类信息输出至预设输出流;其中,预设转储类函数通过预先对原生转储类函数进行封装而获得。
在一些实施例中,加载类信息包括类名称和类加载器地址。
进一步地,应用加载类信息筛选模块220具体用于:
基于预设输出流中的各类的类加载器地址,从预设输出流中筛选属于应用程序的应用加载类信息。
进一步地,应用加载类信息筛选模块220具体用于:
基于系统类的类加载器地址的标识和预设输出流中的各类的类加载器地址,从预设输出流中删除属于系统类的加载类信息,获得应用加载类信息。
在一些实施例中,代码检测信息发送模块230具体用于:
将应用加载类信息发送至服务端,以使服务端基于应用加载类信息和应用程序的安装包确定代码检测结果。
在一些实施例中,代码检测信息发送模块230具体用于:
比较应用加载类信息中的类和安装包中的类,确定在当前用户操作下未被加载的类,作为当前用户对应的代码检测结果。
通过本公开实施例提供的一种代码检测装置,实现了只在应用程序安装包中增加一行调用加载类信息输出函数的代码,便可利用加载类信息输出函数来获得应用程序运行过程中被加载的应用加载类信息,进而获得当前用户操作对应的代码检测结果,既能更加快捷、高效地分析出应用程序源代码中的废弃代码,又能提高代码检测的普适性。
本公开实施例所提供的代码检测装置可执行本公开任意实施例所提供的代码检测方法,具备执行方法相应的功能模块和有益效果。
值得注意的是,上述代码检测装置的实施例中,所包括的各个模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能模块的具体名称也只是为了便于相互区分,并不用于限制本公开的保护范围。
图3为本公开实施例提供的一种电子设备的结构示意图。如图3所示,电子设备300包括一个或多个处理器310和存储器320。
处理器310可以是中央处理单元(CPU)或者具有数据处理能力和/或指令执行能力的其他形式的处理单元,并且可以控制电子设备300中的其他组件以执行期望的功能。
存储器320可以包括一个或多个计算机程序产品,计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。非易失性存储器例如可以包括只读存储器(ROM)、硬盘、闪存等。在计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器310可以运行程序指令,以实现上文所说明的本公开实施例的代码检测方法以及/或者其他期望的功能。在计算机可读存储介质中还可以存储诸如加载类信息、应用程序的安装包、代码检测结果等各种内容。
在一个示例中,电子设备300还可以包括:输入装置330和输出装置340,这些组件通过总线系统和/或其他形式的连接机构(未示出)互连。该输入装置330可以包括例如键盘、鼠标、触摸屏等等。该输出装置340可以向外部输出各种信息,包括加载类信息、代码检测结果等。该输出装置340可以包括例如显示器、扬声器、打印机、以及通信网络及其所连接的远程输出设备等等。
当然,为了简化,图3中仅示出了该电子设备300中与本公开有关的组件中的一些,省略了诸如总线、输入/输出接口等等的组件。除此之外,根据具体应用情况,电子设备300还可以包括任何其他适当的组件。
除了上述方法和设备以外,本公开的实施例还可以是计算机程序产品,其包括计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本公开实施例所提供的代码检测方法的步骤。
所述计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例操作的程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如Java、C++等,还包括常规的过程式程序设计语言,诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。
此外,本公开的实施例还可以是计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本公开实施例所提供的代码检测方法的步骤。
所述计算机可读存储介质可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
需要说明的是,本公开所用术语仅为了描述特定实施例,而非限制本申请范围。如本公开说明书和权利要求书中所示,除非上下文明确提示例外情形,“一”、“一个”、“一种”和/或“该”等词并非特指单数,也可包括复数。术语“和/或”包括一个或多个相关所列条目的任何一个和所有组合。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法或者设备中还存在另外的相同要素。
以上所述仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文所述的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (10)

1.一种代码检测方法,其特征在于,包括:
在待检测的应用程序的运行过程中,通过在所述应用程序的安装包中添加的调用加载类信息输出函数的代码,来调用所述加载类信息输出函数,输出加载类信息至预设输出流,所述预设输出流是指自定义的输出流;
从所述预设输出流中筛选属于所述应用程序的应用加载类信息;
将所述应用程序对应的代码检测信息发送至服务端;其中,所述代码检测信息包括所述应用加载类信息,或者基于所述应用加载类信息和所述应用程序的安装包确定的代码检测结果;所述应用加载类信息用于使所述服务端基于所述应用加载类信息和所述应用程序的安装包确定所述代码检测结果;所述代码检测结果为在当前用户操作下未被加载的类。
2.根据权利要求1所述的方法,其特征在于,所述调用加载类信息输出函数,输出加载类信息至预设输出流,包括:
针对每个被加载的类,以所述预设输出流为输入参数,调用预设转储类函数,将相应类的加载类信息输出至所述预设输出流;其中,所述预设转储类函数通过预先对原生转储类函数进行封装而获得。
3.根据权利要求1所述的方法,其特征在于,所述加载类信息包括类名称和类加载器地址。
4.根据权利要求3所述的方法,其特征在于,所述从所述预设输出流中筛选属于所述应用程序的应用加载类信息包括:
基于所述预设输出流中的各类的类加载器地址,从所述预设输出流中筛选属于所述应用程序的应用加载类信息。
5.根据权利要求4所述的方法,其特征在于,所述基于所述预设输出流中的各类的类加载器地址,从所述预设输出流中筛选属于所述应用程序的应用加载类信息包括:
基于系统类的类加载器地址的标识和所述预设输出流中的各所述类的类加载器地址,从所述预设输出流中删除属于系统类的加载类信息,获得所述应用加载类信息。
6.根据权利要求1所述的方法,其特征在于,所述将所述应用程序对应的代码检测信息发送至服务端包括:
将所述应用加载类信息发送至所述服务端,以使所述服务端基于所述应用加载类信息和所述应用程序的安装包确定所述代码检测结果。
7.根据权利要求1或6所述的方法,其特征在于,基于所述应用加载类信息和所述应用程序的安装包确定代码检测结果包括:
比较所述应用加载类信息中的类和所述安装包中的类,确定在当前用户操作下未被加载的类,作为当前用户对应的代码检测结果。
8.一种代码检测装置,其特征在于,包括:
加载类信息输出模块,用于在待检测的应用程序的运行过程中,通过在所述应用程序的安装包中添加的调用加载类信息输出函数的代码,来调用所述加载类信息输出函数,输出加载类信息至预设输出流,所述预设输出流是指自定义的输出流;
应用加载类信息筛选模块,用于从所述预设输出流中筛选属于所述应用程序的应用加载类信息;
代码检测信息发送模块,用于将所述应用程序对应的代码检测信息发送至服务端;其中,所述代码检测信息包括所述应用加载类信息,或者基于所述应用加载类信息和所述应用程序的安装包确定的代码检测结果;所述应用加载类信息用于使服务端基于所述应用加载类信息和所述应用程序的安装包确定代码检测结果;所述代码检测结果为在当前用户操作下未被加载的类。
9.一种电子设备,其特征在于,所述电子设备包括:
处理器和存储器;
所述处理器通过调用所述存储器存储的程序或指令,用于执行如权利要求1至7任一项所述方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储程序或指令,所述程序或指令使计算机执行如权利要求1至7任一项所述方法的步骤。
CN202110372232.XA 2021-04-07 2021-04-07 代码检测方法、装置、设备和存储介质 Active CN112988592B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110372232.XA CN112988592B (zh) 2021-04-07 2021-04-07 代码检测方法、装置、设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110372232.XA CN112988592B (zh) 2021-04-07 2021-04-07 代码检测方法、装置、设备和存储介质

Publications (2)

Publication Number Publication Date
CN112988592A CN112988592A (zh) 2021-06-18
CN112988592B true CN112988592B (zh) 2024-04-30

Family

ID=76339317

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110372232.XA Active CN112988592B (zh) 2021-04-07 2021-04-07 代码检测方法、装置、设备和存储介质

Country Status (1)

Country Link
CN (1) CN112988592B (zh)

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107590066A (zh) * 2016-07-08 2018-01-16 广州市动景计算机科技有限公司 应用程序的测试方法、设备及可编程设备
CN110188544A (zh) * 2019-05-30 2019-08-30 北京百度网讯科技有限公司 漏洞检测方法及装置、设备及存储介质
CN110245073A (zh) * 2019-05-21 2019-09-17 北京字节跳动网络技术有限公司 终端代码覆盖率监测方法、系统、介质和电子设备
CN110888817A (zh) * 2019-12-18 2020-03-17 广州唯品会研究院有限公司 代码覆盖率报告的生成方法、装置和可读存储介质
CN111240766A (zh) * 2020-01-22 2020-06-05 北京字节跳动网络技术有限公司 应用启动方法、装置、电子设备及计算机可读存储介质
CN111339531A (zh) * 2020-02-24 2020-06-26 南开大学 恶意代码的检测方法、装置、存储介质及电子设备
CN112068903A (zh) * 2020-09-21 2020-12-11 深圳市欢太科技有限公司 应用程序的加载方法、应用程序的加载装置、介质与设备
CN112416794A (zh) * 2020-12-03 2021-02-26 平安银行股份有限公司 代码覆盖率的处理方法、装置、设备及存储介质
CN112506782A (zh) * 2020-12-08 2021-03-16 北京指掌易科技有限公司 一种应用程序的测试方法、装置、设备及存储介质

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103377341A (zh) * 2012-04-28 2013-10-30 北京网秦天下科技有限公司 一种安全检测的方法和系统

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107590066A (zh) * 2016-07-08 2018-01-16 广州市动景计算机科技有限公司 应用程序的测试方法、设备及可编程设备
CN110245073A (zh) * 2019-05-21 2019-09-17 北京字节跳动网络技术有限公司 终端代码覆盖率监测方法、系统、介质和电子设备
CN110188544A (zh) * 2019-05-30 2019-08-30 北京百度网讯科技有限公司 漏洞检测方法及装置、设备及存储介质
CN110888817A (zh) * 2019-12-18 2020-03-17 广州唯品会研究院有限公司 代码覆盖率报告的生成方法、装置和可读存储介质
CN111240766A (zh) * 2020-01-22 2020-06-05 北京字节跳动网络技术有限公司 应用启动方法、装置、电子设备及计算机可读存储介质
CN111339531A (zh) * 2020-02-24 2020-06-26 南开大学 恶意代码的检测方法、装置、存储介质及电子设备
CN112068903A (zh) * 2020-09-21 2020-12-11 深圳市欢太科技有限公司 应用程序的加载方法、应用程序的加载装置、介质与设备
CN112416794A (zh) * 2020-12-03 2021-02-26 平安银行股份有限公司 代码覆盖率的处理方法、装置、设备及存储介质
CN112506782A (zh) * 2020-12-08 2021-03-16 北京指掌易科技有限公司 一种应用程序的测试方法、装置、设备及存储介质

Also Published As

Publication number Publication date
CN112988592A (zh) 2021-06-18

Similar Documents

Publication Publication Date Title
CN110865888B (zh) 一种资源加载方法、装置、服务器及存储介质
US9928038B2 (en) Dynamically building locale objects or subsections of locale objects based on historical data
CN111221521B (zh) 日志代码的生成方法、装置、计算机系统和可读存储介质
CN108549568B (zh) 应用入口处理方法、装置、存储介质及电子设备
US9535666B2 (en) Dynamic agent delivery
CN106649120A (zh) 一种数据获取方法、分析方法及系统
CN109684573B (zh) 目标图片显示方法及装置、存储介质、电子设备
CN109117153B (zh) 应用程序的处理方法、装置、终端和存储介质
CN112214388A (zh) 内存监控方法、装置、设备及计算机可读存储介质
CN111639018A (zh) 一种内存泄漏检测方法和装置
CN104182266B (zh) 一种应用安装方法及装置
CN114995859A (zh) 页面热更新方法、装置、设备及存储介质
CN112988592B (zh) 代码检测方法、装置、设备和存储介质
CN108268298B (zh) 桌面图标的生成方法、装置、存储介质及电子设备
CN111124627A (zh) 应用程序的调起者确定方法、装置、终端及存储介质
CN113110870B (zh) 一种资源打包管理方法、装置、设备及存储介质
CN115576624A (zh) 一种编程框架优化方法、系统、终端设备及存储介质
CN108846141B (zh) 一种离线缓存加载方法及装置
CN110083576B (zh) 一种缓存目录的识别方法及装置
CN109348303B (zh) 一种弹幕消息的分发方法、装置、终端和存储介质
CN113656044A (zh) 安卓安装包压缩方法、装置、计算机设备及存储介质
CN113515299A (zh) 软件开发工具包sdk热升级方法、装置、设备及存储介质
CN112988686A (zh) 插件处理方法、装置、设备和存储介质
CN115421785B (zh) 应用程序的移植处理方法、装置和介质
CN116382796B (zh) 一种h5小程序运行器的插件管理方法、装置及电子设备

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