本技术属于数据处理,尤其涉及字节码处理,具体地讲,涉及一种字节码替换配置文件的生成方法及字节码替换方法。
背景技术:
1、字节码替换,一般是指在源代码编译成字节码后,在android生成dex文件之前,将一段代码插入或者替换原本的代码的技术。
2、在java、android、kotlin开发过程中,难免会遇到需要向第三方sdk中插入代码的来完成业务功能情况,例如在android开发中管控第三方sdk获取敏感信息;而java字节码修改要求开发人员熟悉asm、javaassist等第三方库api,同时还需要了解java字节码的相关知识,在使用gradle作为项目构建工具时,还需要会编写gradle插件,导致开发人员需要花费大量时间完成gradle插件的开发,字节码替换效率低下。
技术实现思路
1、针对现有技术中存在的至少一个问题,本技术提供一种字节码替换配置文件的生成方法及字节码替换方法,能够降低java字节码技术壁垒,使得不了解字节码替换技术的人员也能够快速完成字节码替换,提高字节码替换效率。
2、根据本技术的第一个方面,提供一种字节码替换配置文件的生成方法,包括:
3、确定被替换类、被替换类方法、与所述被替换类对应的替换后类以及与所述被替换类方法对应的替换后类方法;
4、根据所述被替换类、所述被替换类方法、所述替换后类以及所述替换后类方法,生成用于表征类替换和类方法替换的替换代码文件;
5、基于程序结构接口技术,对所述替换代码文件的语法树进行分析,确定所述替换代码文件中的带预设注解信息的类和类方法;
6、根据所述预设注解信息的实际注解内容,确定被替换类和被替换类方法的签名、参数与返回值;
7、基于预先构建的第三方插件、所述被替换类和被替换类方法的签名、参数与返回值,生成字节码替换配置文件。
8、在本实施例的一些可选方式中,所述根据所述被替换类、所述被替换类方法、所述替换后类以及所述替换后类方法,生成用于表征类替换和类方法替换的替换代码文件,包括:
9、分别确定与所述被替换类、所述被替换类方法、所述替换后类以及所述替换后类方法对应的注解信息,得到被替换类注解信息、被替换类方法注解信息、替换后类注解信息以及替换后类方法注解信息;
10、根据所述被替换类注解信息、所述被替换类方法注解信息、所述替换后类注解信息以及所述替换后类方法注解信息,生成用于表征类替换和类方法替换的替换代码文件。
11、在本实施例的一些可选方式中,所述基于预先构建的第三方插件、所述被替换类和被替换类方法的签名、参数与返回值,生成字节码替换配置文件,包括:
12、根据被替换类方法的签名,从预设方法分类库的方法类型中,确定所述被替换类方法对应的目标方法类型;
13、基于预先构建的第三方插件、所述目标方法类型、所述被替换类方法对应的替换后类方法、所述参数以及所述返回值,生成所述被替换类方法对应的类方法替换配置文件;
14、基于预先构建的第三方插件,确定当前选择的java类,将所述当前选择的java类确定为所述被替换类对应的替换后类,生成所述被替换类对应的类替换配置文件;
15、根据所述类方法替换配置文件和所述类替换配置文件,生成所述字节码替换配置文件。
16、在本实施例的一些可选方式中,所述预设方法分类库的方法类型包括公有方法、私有方法、接口方法以及静态方法。
17、根据本技术的第二个方面,还提供了一种字节码替换方法,该方法包括:
18、获取待替换字节码,并基于前述实施例的字节码替换配置文件的生成方法,生成所述待替换字节码对应的字节码替换配置文件;
19、遍历所述待替换字节码,确定所述待替换字节码中与所述字节码替换配置文件匹配的待替换类和/或待替换类方法;
20、基于所述字节码替换配置文件,对所述待替换类和/或待替换类方法进行字节码替换。
21、根据本技术的第三个方面,还提供了一种字节码替换配置文件的生成装置,该装置包括:
22、第一确定模块,被配置为确定被替换类、被替换类方法、与所述被替换类对应的替换后类以及与所述被替换类方法对应的替换后类方法;
23、替换代码文件生成模块,被配置为根据所述被替换类、所述被替换类方法、所述替换后类以及所述替换后类方法,生成用于表征类替换和类方法替换的替换代码文件;
24、第二确定模块,被配置为基于程序结构接口技术,对所述替换代码文件的语法树进行分析,确定所述替换代码文件中的带预设注解信息的类和类方法;
25、第三确定模块,被配置为根据所述预设注解信息的实际注解内容,确定被替换类和被替换类方法的签名、参数与返回值;
26、第一字节码替换配置文件生成模块,被配置为基于预先构建的第三方插件、所述被替换类和被替换类方法的签名、参数与返回值,生成字节码替换配置文件。
27、在本实施例的一些可选方式中,替换代码文件生成模块包括:
28、注解信息确定单元,被配置为分别确定与所述被替换类、所述被替换类方法、所述替换后类以及所述替换后类方法对应的注解信息,得到被替换类注解信息、被替换类方法注解信息、替换后类注解信息以及替换后类方法注解信息;
29、替换代码文件生成单元,被配置为根据所述被替换类注解信息、所述被替换类方法注解信息、所述替换后类注解信息以及所述替换后类方法注解信息,生成用于表征类替换和类方法替换的替换代码文件。
30、根据本技术的第四个方面,还提供了一种字节码替换装置,包括:
31、获取模块,被配置为获取待替换字节码;
32、第二字节码替换配置文件生成模块,被配置为并基于前述实施例的字节码替换配置文件的生成方法,生成所述待替换字节码对应的字节码替换配置文件;
33、第四确定模块,被配置为遍历所述待替换字节码,确定所述待替换字节码中与所述字节码替换配置文件匹配的待替换类和/或待替换类方法;
34、字节码替换模块,被配置为基于所述字节码替换配置文件,对所述待替换类和/或待替换类方法进行字节码替换。
35、根据本技术的第五个方面,还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现所述一种字节码替换配置文件的生成方法的步骤或一种字节码替换方法的步骤。
36、根据本技术的第六个方面,还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现所述一种字节码替换配置文件的生成方法的步骤或一种字节码替换方法的步骤。
37、本技术提供的一种字节码替换配置文件的生成方法及字节码替换方法,首先通过基于被替换类、被替换类方法、与所述被替换类对应的替换后类以及与所述被替换类方法对应的替换后类方法,生成替换代码文件;进一步,基于psi程序接口技术,确定替换代码文件中带预设注解信息的类和类方法;最后基于预先构建的第三方插件、替换类和被替换类方法的签名、参数与返回值,生成能够表征字节码替换信息的字节码替换配置文件,从而能够基于字节码替换配置文件完成字节码替换,有效降低java字节码技术壁垒,让不了解字节码替换技术的人员也能够快速完成字节码替换,提高字节码替换效率。
1.一种字节码替换配置文件的生成方法,其特征在于,包括:
2.根据权利要求1所述的方法,其特征在于,所述根据所述被替换类、所述被替换类方法、所述替换后类以及所述替换后类方法,生成用于表征类替换和类方法替换的替换代码文件,包括:
3.根据权利要求1所述的方法,其特征在于,所述基于预先构建的第三方插件、所述被替换类和被替换类方法的签名、参数与返回值,生成字节码替换配置文件,包括:
4.根据权利要求3所述的方法,其特征在于,所述预设方法分类库的方法类型包括公有方法、私有方法、接口方法以及静态方法。
5.一种字节码替换方法,其特征在于,包括:
6.一种字节码替换配置文件的生成装置,其特征在于,包括:
7.根据权利要求6所述的装置,其特征在于,所述替换代码文件生成模块包括:
8.一种字节码替换装置,其特征在于,包括:
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1至4任一项所述的一种字节码替换配置文件的生成方法的步骤或权利要求5所述的一种字节码替换方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至4任一项所述的一种字节码替换配置文件的生成方法的步骤或权利要求5所述的一种字节码替换方法的步骤。