CN117472432A - 字节码文件处理方法、电子设备及存储介质 - Google Patents

字节码文件处理方法、电子设备及存储介质 Download PDF

Info

Publication number
CN117472432A
CN117472432A CN202311443243.8A CN202311443243A CN117472432A CN 117472432 A CN117472432 A CN 117472432A CN 202311443243 A CN202311443243 A CN 202311443243A CN 117472432 A CN117472432 A CN 117472432A
Authority
CN
China
Prior art keywords
class
log
target
tool
byte code
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.)
Pending
Application number
CN202311443243.8A
Other languages
English (en)
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 58 Information Technology Co Ltd
Original Assignee
Beijing 58 Information 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 58 Information Technology Co Ltd filed Critical Beijing 58 Information Technology Co Ltd
Priority to CN202311443243.8A priority Critical patent/CN117472432A/zh
Publication of CN117472432A publication Critical patent/CN117472432A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/73Program documentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/1805Append-only file systems, e.g. using logs or journals to store data
    • G06F16/1815Journaling file systems
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal 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)
  • Library & Information Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本申请实施例提供一种字节码文件处理方法、电子设备及存储介质。在本申请实施例中,通过字节码修改框架对应用程序的原始字节码进行修改,将调用位置信息作为打印目标方法中的日志信息的日志工具包装类的输入参数提供给目标工具包装类,以得到目标字节码文件,日志工具包装类用于在被调用时将所述调用位置信息、所述日志标签和所述原始消息参数透传给所述日志工具类,以供所述日志工具类输出所述目标方法中与所述日志标签对应的日志信息、所述原始消息参数和所述调用位置信息。解决了手动添加日志信息的位置过程繁琐且浪费时间成本的问题,提高了日志信息的位置的添加效率。

Description

字节码文件处理方法、电子设备及存储介质
技术领域
本申请涉及计算机技术领域,尤其涉及一种字节码文件处理方法、电子设备及存储介质。
背景技术
Log(日志)是一种记录应用程序在运行时信息的机制。开发人员可以通过日志在应用程序中输出各种调试信息或错误信息等,用于在开发过程中调试应用程序。
目前,日志一般是开发人员自己手动添加,但是当日志很多时,即便是开发人员自己添加的日志,单看输出信息也很难找到自己添加的日志的调用位置,那么其他开发人员根据日志去排查、调试问题会更加困难。其中,日志的调用位置可以理解为日志所描述的功能模块的类名和方法名。
对此,开发人员在手动添加日志时,会同时添加日志的调用位置,但是手动添加日志的位置会比较繁琐,浪费时间成本。
发明内容
本申请的多个方面提供一种字节码文件处理方法、电子设备及存储介质,用以解决手动添加日志信息的位置过程繁琐且浪费时间成本的问题,提高日志位置的添加效率。
本申请实施例提供一种字节码文件处理方法,包括:获取应用程序的源代码,并对源代码进行编译,得到可执行的原始字节码文件,原始字节码文件中包括目标功能类,目标功能类包含目标方法,目标方法调用日志工具包装类以打印目标方法中的日志信息,日志工具包装类是对应用程序所依赖的操作系统提供的日志工具类的二次封装;调用字节码修改框架,在原始字节码文件中搜索日志工具包装类的调用位置信息,调用位置信息包括调用日志工具包装类的目标功能类的类名和目标方法的方法名;将调用位置信息作为日志工具包装类的输入参数提供给目标工具包装类,以得到目标字节码文件,其中,日志工具包装类的输入参数还包括用于过滤日志信息日志标签和原始消息参数;日志工具包装类用于在被调用时将调用位置信息、日志标签和原始消息参数透传给日志工具类,以供日志工具类输出目标方法中与日志标签对应的日志信息、原始消息参数和调用位置信息。
本申请实施例还提供另一种字节码文件处理方法,包括:响应应用程序的运行指令,加载应用程序对应的目标字节码文件,目标字节码文件中包括:目标功能类,目标功能类包含目标方法,目标方法调用日志工具包装类以打印目标方法中的日志信息,日志工具包装类是对应用程序所依赖的操作系统提供的日志工具类的二次封装;其中,目标工具包装类的输入参数包括用于过滤日志信息日志标签、原始消息参数以及日志工具包装类的调用位置信息,调用位置信息包括调用日志工具包装类的目标功能类的类名和目标方法的方法名;执行目标字节码文件,并当执行到日志工具包装类时,在日志工具包装类内部,将调用位置信息、原始消息参数和日志标签透传给日志工具类,并调用日志工具类,以供日志工具类输出目标方法中与日志标签对应的日志信息、原始消息参数和调用位置信息。
本申请实施例还提供一种电子设备,包括:存储器和处理器;存储器,用于存储计算机程序;处理器,与存储器耦合,用于执行计算机程序,以实现上述方法中的步骤。
本申请实施例还提供一种存储有计算机程序的计算机可读存储介质,当计算机程序被处理器执行时,致使处理器实现上述方法中的步骤。
本申请一示例性实施例提供的技术方案,通过字节码修改框架对应用程序的原始字节码进行修改,将调用位置信息作为打印目标方法中的日志信息的日志工具包装类的输入参数提供给目标工具包装类,以得到目标字节码文件,解决了手动添加日志信息的位置过程繁琐且浪费时间成本的问题,提高了日志信息的位置的添加效率。
本申请另一示例性实施例提供的技术方案,目标工具包装类的输入参数包括用于过滤日志信息日志标签、原始消息参数以及日志工具包装类的调用位置信息,日志工具包装类用于在被调用时将所述调用位置信息、所述日志标签和所述原始消息参数透传给所述日志工具类,以供所述日志工具类输出所述目标方法中与所述日志标签对应的日志信息、所述原始消息参数和所述调用位置信息,在打印日志信息时,还可以打印处日志信息的位置,便于开发人员基于日志信息的位置进行问题查找和调试。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1a为本申请一示例性实施例提供的字节码文件处理方法的流程示意图;
图1b为本申请另一示例性实施例提供的字节码文件处理的流程示意图;
图2为本申请又一示例性实施例提供的日志信息输出方法的流程示意图;
图3为本申请又一示例性实施例提供的字节码文件处理装置的结构示意图;
图4为本申请又一示例性实施例提供的日志信息输出装置的结构示意图;
图5为本申请又一示例性实施例提供的电子设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,并且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准,并提供有相应的操作入口,供用户选择授权或者拒绝。
针对现有手动添加日志位置过程繁琐且浪费时间成本的技术问题,本申请实施例中,通过字节码修改框架对应用程序的原始字节码进行修改,将调用位置信息作为打印目标方法中的日志信息的日志工具包装类的输入参数提供给目标工具包装类,以得到目标字节码文件,解决了手动添加日志信息的位置过程繁琐且浪费时间成本的问题,提高了日志信息的位置的添加效率。
进一步,目标工具包装类的输入参数包括用于过滤日志信息日志标签、原始消息参数以及日志工具包装类的调用位置信息,日志工具包装类用于在被调用时将所述调用位置信息、所述日志标签和所述原始消息参数透传给所述日志工具类,以供所述日志工具类输出所述目标方法中与所述日志标签对应的日志信息、所述原始消息参数和所述调用位置信息,在打印日志信息时,还可以打印处日志信息的位置,便于开发人员基于日志信息的位置进行问题查找和调试。
以下结合附图,详细说明本申请各实施例提供的技术方案。
图1a为本申请一示例性实施例提供的字节码文件处理方法的流程示意图。如图1所示,该方法包括:
101、获取应用程序的源代码,并对源代码进行编译,得到可执行的原始字节码文件,原始字节码文件中包括目标功能类,目标功能类包含目标方法,目标方法调用日志工具包装类以打印目标方法中的日志信息,日志工具包装类是对应用程序所依赖的操作系统提供的日志工具类的二次封装;
102、调用字节码修改框架,在原始字节码文件中搜索日志工具包装类的调用位置信息,调用位置信息包括调用日志工具包装类的目标功能类的类名和目标方法的方法名;
103、将调用位置信息作为日志工具包装类的输入参数提供给目标工具包装类,以得到目标字节码文件,其中,日志工具包装类的输入参数还包括用于过滤日志信息日志标签和原始消息参数;日志工具包装类用于在被调用时将调用位置信息、日志标签和原始消息参数透传给日志工具类,以供日志工具类输出目标方法中与日志标签对应的日志信息、原始消息参数和调用位置信息。
在本实施例中,对应用程序的种类不做限定。例如,应用程序可以是租房类应用程序、家政类应用程序、游戏类应用程序、购物类应用程序或金融类应用程序,等等。无论是何种应用程序,在开发或运行的过程中,都会产生日志信息。
其中,日志信息记录的是应用程序在开发或运行过程中的信息或事件,可以通过日志信息中记录的应用程序在开发或者运行过程中的信息或事件来调试和排查问题。
每个应用程序包含有多个功能模块,每个功能模块下可能还包括多个子模块,为了便于描述和区分,将每个功能模块称为功能类,每个子模块称为方法,即每个应用程序包括多个功能类,每个功能类包括多个方法。其中,至少部分功能类中的至少部分方法不同的方法对应有不同的日志信息,为了便于区分不同功能类中不同方法包含的日志信息,可以为不同方法包含的日志信息定义日志信息位置,日志信息位置可以由日志信息所记录的对应的功能类的类名(className)及方法的方法名(methName)来命名。例如,目标日志信息记录的是A功能类下的a方法的日志信息,则该目标日志信息的位置信息可以由A功能类和a方法来表示。
通常开发人员在根据日志信息进行调试和问题排查时,需要获知日志信息的位置信息,以便于根据日志信息的位置信息准确定位出需要进行调试和问题排查的位置,再根据记录的日志信息进行调试和问题排查。目前,日志信息的位置信息是由开发人员手动添加至日志信息的相关位置的,但是这种手动添加日志信息的位置会比较繁琐,浪费时间成本。为了解决该技术问题,本实施例中通过字节码修改框架自动添加日志信息位置信息的方式代替手动添加日志信息位置的方式,节省时间成本。
在本实施例中,应用程序的源代码是无法执行的,需要将无法执行的源代码编译为可执行的代码。则在获取到应用程序的源代码后,需要对源代码进行编译,得到可执行的原始字节码文件。
本实施例中,并不限定对源代码进行编译,得到可执行的原始字节码文件的实施方式。以Android系统为例,对源代码进行编译,得到可执行的原始字节码文件包括:在Android Studio中编写自定义Gradle插件,获取应用程序打包过程中的class文件。更为具体地,是在Android Studio项目中新建CustomPlugin模块,在CustomPlugin模块下的src\main\groovy\com\custom\plugin\目录中新建CloseLogPlugin.groovy文件;在apply方法中注册Transform方法到项目中,并在Transform方法中获取到整个项目的目录文件,遍历整个项目的目录,过滤出其中的class字节码文件。
进一步地,在得到原始字节码文件后,可以调用字节码修改框架,在原始字节码文件中搜索日志工具包装类的调用位置信息,调用位置信息包括调用日志工具包装类的目标功能类的类名和目标方法的方法名。日志工具包装类的调用位置,即为目标方法中的日志信息的位置。
其中,并不限定字节码修改框架的种类。例如可以是ASM(Automatic StorageManagement,简称自动存储管理)字节码修改框架、Javassist字节码修改框架,等等。其中,ASM字节码修改框架是Java中的用来读写字节码的类库,用来基于字节码层面对代码进行分析和转换。另外,ASM字节码修改框架也是一个Java字节码操纵框架,它能被用来动态生成类或者增强既有类的功能。ASM字节码修改框架可以直接产生二进制class文件,也可在类被加载入虚拟机之前动态改变类行为,ASM字节码修改框架从类文件中读入信息后,能够改变类行为,分析类信息,甚至能根据要求生成新类。在读写的过程中可以加入自定义的逻辑以增强或修改原来已编译好的字节码,比如CGLIB用它来实现动态代理。ASM字节码修改框架速度很快,从而避免在运行时动态生成字节码或转换时对程序速度的影响,又因为它体积小巧,可以在很多内存受限的环境中使用。Javassist字节码修改框架是一个开源的Java字节码操作库,提供了简单易用的API,可以在运行时动态修改Java类的字节码。Javassist可以用来实现AOP(面向切面编程)、动态代理、字节码增强等功能。
需要说明的是,无论是哪种字节码修改框架,其都可以作为应用程序的插件或软件开发工具包(Software Development Kit,SDK)集成在应用程序中。还需要说明的是,本申请实施例中重点关注的是ASM字节码修改框架。
由于每个应用程序都包括多个功能类,每个功能类又包括多个方法,则原始字节码文件中包括目标功能类,目标功能类包含目标方法。目标方法的日志信息,可以通过调用应用程序所依赖的操作系统提供的日志工具类来输出。通过日志工具类中仅包含日志信息的日志标签(tag)和原始消息参数(msg),即通过日志工具类只能打印日志标签和日志信息,无法通过目标功能类打印出目标方法的日志信息的位置信息。其中,原始消息参数用于表示日志信息,日志标签用于过滤日志信息。
对此,在本实施例中,在操作系统提供的日志工具类的基础上,通过对应用程序所依赖的操作系统提供的日志工具类的二次封装,得到一种新的日志工具类工具,简称为日志工具包装类。该日志工具包装类可以支持更多的输入参数,例如至少在日志工具类所支持的日志标签和原始消息参数这两个输入参数的基础上,新增了类名和方法名两个占位参数,两个占位参数设置默认值。因此,在应用程序开发过程中,开发人员在添加用于输出日志信息的工具类时,不再使用操作系统提供的日志工具类,而是采用本申请实施例提供的日志工具包装类。基于此,在对应用程序的源代码进行编译得到可执行的原始字节码文件中包含日志工具包装类,进而可以通过字节码修改框架在日志工具包装类中新增调用位置信息,对日志工具包装类的输入参数中新增的类名和方法名两个占位参数的默认值进行修改,修改为调用位置信息中的目标功能类的类名和目标方法的方法名,使得日志工具包装类将调用位置信息、日志标签和原始消息参数透传给日志工具类。目标方法可以调用日志工具包装类以打印目标方法中的日志信息。具体地,日志工具包装类用于在被调用时将调用位置信息、日志标签和原始消息参数透传给日志工具类,以供日志工具类输出目标方法中与日志标签对应的日志信息、原始消息参数和调用位置信息。以日志工具类对应的调用方法表示为Log.d,则日志工具包装类对应的调用方法可以表示为DemoLog.d,只包含日志标签和原始消息参数时的调用方法Log.d和调用方法DemoLog.d分别表示如下:
Log.d(tag,msg);
DemoLog.d(tag,msg)。
依旧以日志工具类对应的调用方法是Log.d,日志工具包装类对应的调用方法是DemoLog.d为例,包含日志标签、原始消息参数和调用位置信息时的调用方法Log.d和包装方法DemoLog.d分别表示如下:
Log.d(tag,msg’)msg’=msg+className+methoName;
DemoLog.d(tag,msg,className,methoName)。
也就是说,在通过字节码修改框架搜索到日志工具包装类的调用位置信息后,还可以通过字节码修改框架将调用位置信息作为日志工具包装类的输入参数提供给日志工具包装类,以得到目标字节码文件。即,通过字节码修改框架搜索日志工具包装类的调用位置,并将调用位置对应的占位参数添加至日志工具类中,并对添加了占位参数的日志工具类进行二次封装,得到日志工具包装类,以得到目标字节码文件,目标字节码文件例如可以是Dex文件。
本申请上述各实施例提供的技术方案,通过字节码修改框架对应用程序的原始字节码进行修改,将调用位置信息作为打印目标方法中的日志信息的日志工具包装类的输入参数提供给目标工具包装类,以得到目标字节码文件,日志工具包装类用于在被调用时将所述调用位置信息、所述日志标签和所述原始消息参数透传给所述日志工具类,以供所述日志工具类输出所述目标方法中与所述日志标签对应的日志信息、所述原始消息参数和所述调用位置信息。解决了手动添加日志信息的位置过程繁琐且浪费时间成本的问题,提高了日志信息的位置的添加效率。
在本实施例中,在得到目标字节码文件后,响应应用程序的运行指令,加载并执行目标字节码文件;当执行到日志工具包装类时,在日志工具包装类内部,将调用位置信息、原始消息参数和日志标签透传给日志工具类,并调用日志工具类,以供日志工具类输出目标方法中与日志标签对应的日志信息、原始消息参数和调用位置信息。
在一可选实施例中,调用字节码修改框架,在原始字节码文件中搜索日志工具包装类的调用位置信息,包括:将原始字节码文件以及日志工具包装类的名称输入字节码修改框架;在字节码修改框架中,根据日志工具包装类的名称,遍历原始字节码文件中各个功能类中包含的各个方法中是否包含日志工具包装类的名称;在发现日志工具包装类的名称时,将日志工具包装类的名称所在的方法和该方法所属的功能类,分别作为目标方法和目标功能类,并将目标方法的方法名和目标功能类的类名作为日志工具包装类的调用位置信息。
在一可选实施例中,将调用位置信息作为日志工具包装类的输入参数提供给目标工具包装类,以得到目标字节码文件,包括:在字节码修改框架中,获取日志工具包装类的输入参数中具有默认值的两个占位参数;以目标功能类的类名和目标方法的名作为两个入参,分别更新为两个占位参数的默认值,以将调用位置信息作为日志工具包装类的输入参数提供给目标工具包装类得到目标字节码文件。
进一步可选地,日志工具类默认支持两个输入参数,则将调用位置信息、原始消息参数和日志标签透传给日志工具类,包括:将调用位置信息与原始消息参数拼接为目标消息参数,并将日志标签和目标消息参数作为日志工具类的两个输入参数透传给日志工具类。
为了便于理解上述实施例,下面结合图1b并以字节码修改框架为ASM字节码修改框架为例进行详细说明。
首先,获取应用程序的源代码文件,如JAVA源代码文件,并对JAVA源代码文件进行编译,得到可执行的原始字节码文件。以Android系统为例,对源代码进行编译,得到可执行的原始字节码文件包括:在Android Studio中编写自定义Gradle插件,获取应用程序打包过程中的class文件。更为具体地,是在Android Studio项目中新建CustomPlugin模块,在CustomPlugin模块下的src\main\groovy\com\custom\plugin\目录中新建CloseLogPlugin.groovy文件;在apply方法中注册Transform方法到项目中,并在Transform方法中获取到整个项目的目录文件,遍历整个项目的目录,过滤出其中的class字节码文件。
在得到class文件后,调用ASM字节码修改框架,将原始字节码文件以及日志工具包装类的名称输入字节码修改框架;在字节码修改框架中,根据日志工具包装类的名称,遍历原始字节码文件中各个功能类中包含的各个方法中是否包含日志工具包装类的名称;在发现日志工具包装类的名称时,将日志工具包装类的名称所在的方法和该方法所属的功能类,分别作为目标方法和目标功能类,并将目标方法的方法名和目标功能类的类名作为日志工具包装类的调用位置信息,在日志工具包装类中增加类名和方法名两个占位参数,并将两个占位参数设置为默认值。此时,日志工具包装类中具有4个参数。
在得到日志工具包装类的调用位置信息后,在字节码修改框架中,获取日志工具包装类的输入参数中具有默认值的两个占位参数;以目标功能类的类名和目标方法的名作为两个入参,分别更新为两个占位参数的默认值,以将调用位置信息作为日志工具包装类的输入参数提供给目标工具包装类,得到Dex字节码文件。
在得到Dex字节码文件后,在有打印日志信息的需求时,响应应用程序的运行指令,加载并执行目标字节码文件;当执行到日志工具包装类时,在日志工具包装类内部,将调用位置信息与原始消息参数拼接为目标消息参数,并将日志标签和目标消息参数作为日志工具类的两个输入参数透传给日志工具类。并调用日志工具类,以供日志工具类输出目标方法中与日志标签对应的日志信息、原始消息参数和调用位置信息。
图2为本申请另一示例性实施例提供的日志信息输出方法的流程示意图。如图2所示,该方法包括:
201、响应应用程序的运行指令,加载应用程序对应的目标字节码文件,目标字节码文件中包括:目标功能类,目标功能类包含目标方法,目标方法调用日志工具包装类以打印目标方法中的日志信息,日志工具包装类是对应用程序所依赖的操作系统提供的日志工具类的二次封装;
其中,目标工具包装类的输入参数包括用于过滤日志信息日志标签、原始消息参数以及日志工具包装类的调用位置信息,调用位置信息包括调用日志工具包装类的目标功能类的类名和目标方法的方法名;
202、执行目标字节码文件,并当执行到日志工具包装类时,在日志工具包装类内部,将调用位置信息、原始消息参数和日志标签透传给日志工具类,并调用日志工具类,以供日志工具类输出目标方法中与日志标签对应的日志信息、原始消息参数和调用位置信息。
本申请实施例提供的技术方案,目标工具包装类的输入参数包括用于过滤日志信息日志标签、原始消息参数以及日志工具包装类的调用位置信息,日志工具包装类用于在被调用时将所述调用位置信息、所述日志标签和所述原始消息参数透传给所述日志工具类,以供所述日志工具类输出所述目标方法中与所述日志标签对应的日志信息、所述原始消息参数和所述调用位置信息,在打印日志信息时,还可以打印处日志信息的位置,便于开发人员基于日志信息的位置进行问题查找和调试。
进一步可选地,在响应应用程序的运行指令,加载应用程序对应的目标字节码文件之前,还包括:获取应用程序的源代码,并对源代码进行编译,得到可执行的原始字节码文件,原始字节码文件中包括目标功能类,目标功能类包含目标方法;调用字节码修改框架,在原始字节码文件中搜索日志工具包装类的调用位置信息;将调用位置信息作为日志工具包装类的输入参数提供给目标工具包装类,以得到目标字节码文件。
关于本申请实施例提供的字节码文件方法的详细实施方式以及有益效果可参见前述实施例的相关详细描述,此处将不做详细阐述说明。
图3为本申请一示例性实施例提供的字节码文件处理装置的结构示意图。如图3所示,该装置包括:
编译模块31,用于获取应用程序的源代码,并对源代码进行编译,得到可执行的原始字节码文件,原始字节码文件中包括目标功能类,目标功能类包含目标方法,目标方法调用日志工具包装类以打印目标方法中的日志信息,日志工具包装类是对应用程序所依赖的操作系统提供的日志工具类的二次封装;
搜索模块32,用于调用字节码修改框架,在原始字节码文件中搜索日志工具包装类的调用位置信息,调用位置信息包括调用日志工具包装类的目标功能类的类名和目标方法的方法名;
更新模块33,用于将调用位置信息作为日志工具包装类的输入参数提供给目标工具包装类,以得到目标字节码文件,其中,日志工具包装类的输入参数还包括用于过滤日志信息日志标签和原始消息参数;
日志工具包装类用于在被调用时将调用位置信息、日志标签和原始消息参数透传给日志工具类,以供日志工具类输出目标方法中与日志标签对应的日志信息、原始消息参数和调用位置信息。
进一步,还包括:执行模块34,用于响应应用程序的运行指令,加载并执行目标字节码文件;当执行到日志工具包装类时,在日志工具包装类内部,将调用位置信息、原始消息参数和日志标签透传给日志工具类,并调用日志工具类,以供日志工具类输出目标方法中与日志标签对应的日志信息、原始消息参数和调用位置信息。
在一可选实施例中,搜索模块32在用于调用字节码修改框架,在原始字节码文件中搜索日志工具包装类的调用位置信息时,具体用于:将原始字节码文件以及日志工具包装类的名称输入字节码修改框架;在字节码修改框架中,根据日志工具包装类的名称,遍历原始字节码文件中各个功能类中包含的各个方法中是否包含日志工具包装类的名称;在发现日志工具包装类的名称时,将日志工具包装类的名称所在的方法和该方法所属的功能类,分别作为目标方法和目标功能类,并将目标方法的方法名和目标功能类的类名作为日志工具包装类的调用位置信息。
在一可选实施例中,更新模块33在用于将调用位置信息作为日志工具包装类的输入参数提供给目标工具包装类,以得到目标字节码文件时,具体用于:在字节码修改框架中,获取日志工具包装类的输入参数中具有默认值的两个占位参数;以目标功能类的类名和目标方法的名作为两个入参,分别更新为两个占位参数的默认值,以将调用位置信息作为日志工具包装类的输入参数提供给目标工具包装类得到目标字节码文件。
在一可选实施例中,日志工具类默认支持两个输入参数,则执行模块34在用于将调用位置信息、原始消息参数和日志标签透传给日志工具类时,具体用于:将调用位置信息与原始消息参数拼接为目标消息参数,并将日志标签和目标消息参数作为日志工具类的两个输入参数透传给日志工具类。
进一步可选地,字节码修改框架作为应用程序的插件或SDK集成在应用程序中。
关于本申请实施例提供的字节码文件处理装置的详细实施方式以及有益效果已经在前述实施例中进行了详细描述,此处将不做详细阐述说明。
图4为本申请另一示例性实施例提供的日志信息输出装置的结构示意图。如图4所示,该装置包括:
加载模块41,用于响应应用程序的运行指令,加载应用程序对应的目标字节码文件,目标字节码文件中包括:目标功能类,目标功能类包含目标方法,目标方法调用日志工具包装类以打印目标方法中的日志信息,日志工具包装类是对应用程序所依赖的操作系统提供的日志工具类的二次封装;
其中,目标工具包装类的输入参数包括用于过滤日志信息日志标签、原始消息参数以及日志工具包装类的调用位置信息,调用位置信息包括调用日志工具包装类的目标功能类的类名和目标方法的方法名;
执行模块42,用于执行目标字节码文件,并当执行到日志工具包装类时,在日志工具包装类内部,将调用位置信息、原始消息参数和日志标签透传给日志工具类,并调用日志工具类,以供日志工具类输出目标方法中与日志标签对应的日志信息、原始消息参数和调用位置信息。
在一可选实施例中,在加载模块41用于响应应用程序的运行指令,加载应用程序对应的目标字节码文件之前,还包括:编译模块、搜索模块和更新模块,
编译模块用于获取应用程序的源代码,并对源代码进行编译,得到可执行的原始字节码文件,原始字节码文件中包括目标功能类,目标功能类包含目标方法;
搜索模块,用于调用字节码修改框架,在原始字节码文件中搜索日志工具包装类的调用位置信息;
更新模块,用于将调用位置信息作为日志工具包装类的输入参数提供给目标工具包装类,以得到目标字节码文件。
关于本申请实施例提供的日志信息输出装置的详细实施方式以及有益效果已经在前述实施例中进行了详细描述,此处将不做详细阐述说明。
图5为本申请一示例性实施例提供的电子设备的结构示意图。如图5所示,该电子设备包括:存储器50a和处理器50b;存储器50a,用于存储计算机程序;处理器50b,与存储器50a耦合,用于执行计算机程序,以实现以下步骤:
获取应用程序的源代码,并对源代码进行编译,得到可执行的原始字节码文件,原始字节码文件中包括目标功能类,目标功能类包含目标方法,目标方法调用日志工具包装类以打印目标方法中的日志信息,日志工具包装类是对应用程序所依赖的操作系统提供的日志工具类的二次封装;调用字节码修改框架,在原始字节码文件中搜索日志工具包装类的调用位置信息,调用位置信息包括调用日志工具包装类的目标功能类的类名和目标方法的方法名;将调用位置信息作为日志工具包装类的输入参数提供给目标工具包装类,以得到目标字节码文件,其中,日志工具包装类的输入参数还包括用于过滤日志信息日志标签和原始消息参数;日志工具包装类用于在被调用时将调用位置信息、日志标签和原始消息参数透传给日志工具类,以供日志工具类输出目标方法中与日志标签对应的日志信息、原始消息参数和调用位置信息。
进一步,处理器50b还用于响应应用程序的运行指令,加载并执行目标字节码文件;当执行到日志工具包装类时,在日志工具包装类内部,将调用位置信息、原始消息参数和日志标签透传给日志工具类,并调用日志工具类,以供日志工具类输出目标方法中与日志标签对应的日志信息、原始消息参数和调用位置信息。
在一可选实施例中,处理器50b在用于调用字节码修改框架,在原始字节码文件中搜索日志工具包装类的调用位置信息时,具体用于:将原始字节码文件以及日志工具包装类的名称输入字节码修改框架;在字节码修改框架中,根据日志工具包装类的名称,遍历原始字节码文件中各个功能类中包含的各个方法中是否包含日志工具包装类的名称;在发现日志工具包装类的名称时,将日志工具包装类的名称所在的方法和该方法所属的功能类,分别作为目标方法和目标功能类,并将目标方法的方法名和目标功能类的类名作为日志工具包装类的调用位置信息。
在一可选实施例中,处理器50b在用于将调用位置信息作为日志工具包装类的输入参数提供给目标工具包装类,以得到目标字节码文件时,具体用于:在字节码修改框架中,获取日志工具包装类的输入参数中具有默认值的两个占位参数;以目标功能类的类名和目标方法的名作为两个入参,分别更新为两个占位参数的默认值,以将调用位置信息作为日志工具包装类的输入参数提供给目标工具包装类得到目标字节码文件。
在一可选实施例中,日志工具类默认支持两个输入参数,则处理器50b在用于将调用位置信息、原始消息参数和日志标签透传给日志工具类时,具体用于:将调用位置信息与原始消息参数拼接为目标消息参数,并将日志标签和目标消息参数作为日志工具类的两个输入参数透传给日志工具类。
进一步可选地,字节码修改框架作为应用程序的插件或SDK集成在应用程序中。
此外,图5所示的电子设备除了可以执行上述步骤外,还可以执行如下步骤。具体的处理器50b,与存储器50a耦合,用于执行计算机程序,以实现以下步骤:
响应应用程序的运行指令,加载应用程序对应的目标字节码文件,目标字节码文件中包括:目标功能类,目标功能类包含目标方法,目标方法调用日志工具包装类以打印目标方法中的日志信息,日志工具包装类是对应用程序所依赖的操作系统提供的日志工具类的二次封装;其中,目标工具包装类的输入参数包括用于过滤日志信息日志标签、原始消息参数以及日志工具包装类的调用位置信息,调用位置信息包括调用日志工具包装类的目标功能类的类名和目标方法的方法名;执行目标字节码文件,并当执行到日志工具包装类时,在日志工具包装类内部,将调用位置信息、原始消息参数和日志标签透传给日志工具类,并调用日志工具类,以供日志工具类输出目标方法中与日志标签对应的日志信息、原始消息参数和调用位置信息。
在一可选实施例中,在处理器50b用于响应应用程序的运行指令,加载应用程序对应的目标字节码文件之前,还还用于获取应用程序的源代码,并对源代码进行编译,得到可执行的原始字节码文件,原始字节码文件中包括目标功能类,目标功能类包含目标方法;调用字节码修改框架,在原始字节码文件中搜索日志工具包装类的调用位置信息;将调用位置信息作为日志工具包装类的输入参数提供给目标工具包装类,以得到目标字节码文件。
此外,如图5所示,该电子设备还包括:通信组件50c、显示器50d、电源组件50e、音频组件50f等其它组件。图5中仅示意性给出部分组件,并不意味着电子设备只包括图5所示组件。
关于本申请实施例提供的电子设备的详细实施方式以及有益效果已经在前述实施例中进行了详细描述,此处将不做详细阐述说明。
本申请一示例性实施例还提供存储有计算机程序的计算机可读存储介质,当计算机程序被处理器执行时,致使处理器实现上述方法中的步骤。
上述存储器可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(Static Random-Access Memory,SRAM),电可擦除可编程只读存储器(Electrically Erasable Programmable Read Only Memory,EEPROM),可擦除可编程只读存储器(Erasable Programmable Read Only Memory,EPROM),可编程只读存储器(Programmable Read-Only Memory,PROM),只读存储器(Read-Only Memory,ROM),磁存储器,快闪存储器,磁盘或光盘。
上述通信组件被配置为便于通信组件所在设备和其他设备之间有线或无线方式的通信。通信组件所在设备可以接入基于通信标准的无线网络,如WiFi,2G、3G、4G/LTE、5G等移动通信网络,或它们的组合。在一个示例性实施例中,通信组件经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,通信组件还包括近场通信(Near Field Communication,NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(Radio Frequency Identification,RFID)技术,红外数据协会(InfraredData Association,IrDA)技术,超宽带(Ultra Wide Band,UWB)技术,蓝牙(BlueTooth,BT)技术和其他技术来实现。
上述显示器包括屏幕,其屏幕可以包括液晶显示器(Liquid Crystal Display,LCD)和触摸面板(TouchPanel,TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与触摸或滑动操作相关的持续时间和压力。
上述电源组件,为电源组件所在设备的各种组件提供电力。电源组件可以包括电源管理系统,一个或多个电源,及其他与为电源组件所在设备生成、管理和分配电力相关联的组件。
上述音频组件,可被配置为输出和/或输入音频信号。例如,音频组件包括一个麦克风(Microphone,MIC),当音频组件所在设备处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器或经由通信组件发送。在一些实施例中,音频组件还包括一个扬声器,用于输出音频信号。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可读存储介质(包括但不限于磁盘存储器、只读光盘(Compact Disc Read-Only Memory,CD-ROM)、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(Central ProcessingUnit,CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RandomAccess Memory,RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(Phase-change Random AccessMemory,PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(Digital Video Disc,DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

Claims (10)

1.一种字节码文件处理方法,其特征在于,包括:
获取应用程序的源代码,并对源代码进行编译,得到可执行的原始字节码文件,所述原始字节码文件中包括目标功能类,所述目标功能类包含目标方法,所述目标方法调用日志工具包装类以打印所述目标方法中的日志信息,所述日志工具包装类是对所述应用程序所依赖的操作系统提供的日志工具类的二次封装;
调用字节码修改框架,在所述原始字节码文件中搜索所述日志工具包装类的调用位置信息,所述调用位置信息包括调用所述日志工具包装类的目标功能类的类名和目标方法的方法名;
将所述调用位置信息作为所述日志工具包装类的输入参数提供给所述目标工具包装类,以得到目标字节码文件,其中,所述日志工具包装类的输入参数还包括用于过滤日志信息的日志标签和原始消息参数;
所述日志工具包装类用于在被调用时将所述调用位置信息、所述日志标签和所述原始消息参数透传给所述日志工具类,以供所述日志工具类输出所述目标方法中与所述日志标签对应的日志信息、所述原始消息参数和所述调用位置信息。
2.根据权利要求1所述的方法,其特征在于,还包括:
响应所述应用程序的运行指令,加载并执行所述目标字节码文件;
当执行到所述日志工具包装类时,在所述日志工具包装类内部,将所述调用位置信息、所述原始消息参数和所述日志标签透传给所述日志工具类,并调用所述日志工具类,以供所述日志工具类输出所述目标方法中与所述日志标签对应的日志信息、所述原始消息参数和所述调用位置信息。
3.根据权利要求1所述的方法,其特征在于,调用字节码修改框架,在所述原始字节码文件中搜索所述日志工具包装类的调用位置信息,包括:
将所述原始字节码文件以及所述日志工具包装类的名称输入所述字节码修改框架;
在所述字节码修改框架中,根据所述日志工具包装类的名称,遍历所述原始字节码文件中各个功能类中包含的各个方法中是否包含所述日志工具包装类的名称;
在发现所述日志工具包装类的名称时,将所述日志工具包装类的名称所在的方法和该方法所属的功能类,分别作为目标方法和目标功能类,并将所述目标方法的方法名和所述目标功能类的类名作为所述日志工具包装类的调用位置信息。
4.根据权利要求1或2所述的方法,其特征在于,将所述调用位置信息作为所述日志工具包装类的输入参数提供给所述目标工具包装类,以得到目标字节码文件,包括:
在所述字节码修改框架中,获取所述日志工具包装类的输入参数中具有默认值的两个占位参数;
以所述目标功能类的类名和目标方法的名作为两个入参,分别更新为所述两个占位参数的默认值,以将所述调用位置信息作为所述日志工具包装类的输入参数提供给所述目标工具包装类得到目标字节码文件。
5.根据权利要求4所述的方法,其特征在于,所述日志工具类默认支持两个输入参数,则将所述调用位置信息、所述原始消息参数和所述日志标签透传给所述日志工具类,包括:
将所述调用位置信息与所述原始消息参数拼接为目标消息参数,并将所述日志标签和所述目标消息参数作为所述日志工具类的两个输入参数透传给所述日志工具类。
6.根据权利要求1-3以及5中任一项所述的方法,其特征在于,所述字节码修改框架作为所述应用程序的插件或SDK集成在所述应用程序中。
7.一种日志信息输出方法,其特征在于,包括:
响应应用程序的运行指令,加载应用程序对应的目标字节码文件,所述目标字节码文件中包括:目标功能类,所述目标功能类包含目标方法,所述目标方法调用日志工具包装类以打印所述目标方法中的日志信息,所述日志工具包装类是对所述应用程序所依赖的操作系统提供的日志工具类的二次封装;
其中,所述日志工具包装类的输入参数包括用于过滤日志信息日志标签、原始消息参数以及所述日志工具包装类的调用位置信息,所述调用位置信息包括调用所述日志工具包装类的目标功能类的类名和目标方法的方法名;
执行所述目标字节码文件,并当执行到所述日志工具包装类时,在所述日志工具包装类内部,将所述调用位置信息、所述原始消息参数和所述日志标签透传给所述日志工具类,并调用所述日志工具类,以供所述日志工具类输出所述目标方法中与所述日志标签对应的日志信息、所述原始消息参数和所述调用位置信息。
8.根据权利要求7所述的方法,其特征在于,在响应应用程序的运行指令,加载应用程序对应的目标字节码文件之前,还包括:
获取应用程序的源代码,并对源代码进行编译,得到可执行的原始字节码文件,所述原始字节码文件中包括目标功能类,所述目标功能类包含目标方法;
调用字节码修改框架,在所述原始字节码文件中搜索所述日志工具包装类的调用位置信息;
将所述调用位置信息作为所述日志工具包装类的输入参数提供给所述目标工具包装类,以得到目标字节码文件。
9.一种电子设备,其特征在于,包括:存储器和处理器;所述存储器,用于存储计算机程序;所述处理器,与所述存储器耦合,用于执行所述计算机程序,以实现权利要求1-7中任一项或权利要求8中的步骤。
10.一种存储有计算机程序的计算机可读存储介质,其特征在于,当所述计算机程序被处理器执行时,致使所述处理器实现权利要求1-7中任一项或权利要求8中的步骤。
CN202311443243.8A 2023-11-01 2023-11-01 字节码文件处理方法、电子设备及存储介质 Pending CN117472432A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311443243.8A CN117472432A (zh) 2023-11-01 2023-11-01 字节码文件处理方法、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311443243.8A CN117472432A (zh) 2023-11-01 2023-11-01 字节码文件处理方法、电子设备及存储介质

Publications (1)

Publication Number Publication Date
CN117472432A true CN117472432A (zh) 2024-01-30

Family

ID=89634368

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311443243.8A Pending CN117472432A (zh) 2023-11-01 2023-11-01 字节码文件处理方法、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN117472432A (zh)

Similar Documents

Publication Publication Date Title
CN108964968B (zh) 一种容器云环境下的服务接入管理方法和系统
CN114168111B (zh) 组件化路由实现方法、设备、产品及存储介质
CN107832059B (zh) 一种基于Makefile的代码静态分析方法和装置
US20140298318A1 (en) Computer-executable application packaging method, computer-executable device and storage media performing the same
CN111399840B (zh) 一种模块开发方法及装置
CN110399384B (zh) Udf适配方法、数据处理方法、设备及存储介质
CN111240684A (zh) 一种js代码的裁剪方法、装置、介质和电子设备
CN112463123A (zh) 任务编译方法、装置、网络节点、系统及存储介质
CN111596951A (zh) 一种工程文件的配置方法及装置
CN106610845B (zh) 信息管理方法、装置、服务器及系统
CN114840214A (zh) 程序编译和启动方法、设备及存储介质
US11934420B2 (en) Systems and methods for componentization and plug and play workflows
KR101112697B1 (ko) 에스케이브이엠 및 위피자바 응용프로그램을 안드로이드 응용프로그램으로 변환하는 프로그램을 기록한 컴퓨터로 판독가능한 기록매체
CN110874216A (zh) 一种完备代码生成方法、装置、设备和存储介质
CN110851370B (zh) 程序测试方法及装置、存储介质
CN110941443B (zh) 修改sdk中文件名的方法、装置及电子设备
CN112764796A (zh) 安装包生成系统
WO2020135129A1 (zh) 加载应用的插件的方法、装置和终端
CN117472432A (zh) 字节码文件处理方法、电子设备及存储介质
CN114168183A (zh) 前端资源信息处理方法、装置、设备及存储介质
CN113296777B (zh) 依赖分析和程序编译方法、设备及存储介质
CN111580873B (zh) 页面更新方法及装置、终端、存储介质
WO2019157891A1 (zh) 应用安装方法、应用安装包的生成方法
CN114489607A (zh) 跨栈应用处理与页面渲染方法、装置、设备及存储介质
JP2016515243A (ja) アンドロイドアプリケーションのタイゼン導入可能パッケージ自動変換方法及びこのためのコンピュータ読み取り可能な記録媒体

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