[发明专利]基于ksp生成描述文件的方法及快速插桩的gradle编译系统有效
申请号: | 202211611995.6 | 申请日: | 2022-12-15 |
公开(公告)号: | CN115617353B | 公开(公告)日: | 2023-03-21 |
发明(设计)人: | 沈黎明;叶玎玎;骆晓广;张溪梦;张金银 | 申请(专利权)人: | 杭州比智科技有限公司 |
主分类号: | G06F8/41 | 分类号: | G06F8/41;G06F8/73;G06F11/36 |
代理公司: | 北京云科知识产权代理事务所(特殊普通合伙) 11483 | 代理人: | 王素贞 |
地址: | 311121 浙江省杭州市*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 ksp 生成 描述 文件 方法 快速 gradle 编译 系统 | ||
1.一种基于 ksp 生成描述文件的方法,其特征在于,所述方法包括以下步骤:
S1.声明配置描述文件的自定义注解及其属性字段;根据不同类型的插桩情况分别对应创建多种类型注解和一种通用型注解;并设置标识注解Belong来提供给ksp进行识别;
S2.根据自定义注解对需要注入的类进行描述,以自定义描述接口类;由标识注解Belong声明接口描述文件,相应注解属性声明该接口描述文件将要插桩的代码类路径;
S3.根据描述接口类,通过ksp自动生成不同插桩类型的类路径方法的集合;
S4.根据插桩的实体集合通过 Gradle 编译期间对代码进行快速插桩;通过AGP读取实体集合,遍历所有的用户代码和第三方jar包,与内存中的实例集合进行匹配,对代码进行插桩处理,将插桩后的代码同项目一起打包进行发布;
步骤S3中包括以下子步骤:
S301,注册KSP处理器,遍历所有有Belong标识注解的接口描述类,处理包含Belong表示注解的接口;
S302,遍历所有配置描述文件获取注解上的信息,该实体为Kotlin中的对象实例;
S303,将数据实体根据插桩类型放入不同的集合中;
S304,通过KotlinPoet生成实体集合类;其中生成类为 HookInjectorClass,该Class为静态的kotlin类,能在 gradle 插件中直接调用;
S305,通过 Gradle 自定义任务自动将生成的类复制到Gradle插件中;其中任务会自动在build时运行,保证每一次改动都能在编译时自动实时更新。
2. 根据权利要求1所述的基于 ksp 生成描述文件的方法,其特征在于,步骤S1中声明配置描述文件的自定义注解及其属性字段,包括:
S101.根据不同的插桩方式和位置声明各种类型的自定义注解;
S102.通过注解属性声明插桩目标的类和方法。
3.根据权利要求2所述的方法,其特征在于,步骤S101中,所述不同的插桩方式包括插入插入目标类的目标方法、插入目标类的目标方法调用时的上下行和插入目标类其一级子类的目标方法。
4.根据权利要求2所述的方法,其特征在于,步骤S102中,通过注解属性声明插桩目标的类和方法,包括:
声明目标类,目标方法,方法参数,返回值,位置前后,插桩目标属性以确定插桩位置的唯一性。
5.根据权利要求1所述的方法,其特征在于,步骤S2中,根据自定义注解对需要注入的类进行描述以自定义描述接口类,包括:
S201.根据需要插桩的类和插桩的类型选择特定类型的注解并填写注解属性,可根据不同的功能类型分为不同的描述接口类;
S202.根据不同的插桩类型生成不同的实体集合,用于 Gradle 编译通过类型采取不同措施。
6.根据权利要求1所述的方法,其特征在于,步骤S304中通过KotlinPoet自动生成的代码需要预先定好模板代码,具体包括以下子步骤:
S304.1利用ClassBuilder构造一个包含所有插桩参数的实体类;
S304.2利用PropertySpecBuilder初始化集合,用来存放步骤S304.1生成的实体类;
S304.3利用FunSpecBuilder生成行代码,循环将步骤S302解析获得的参数封装并放入集合中;
S304.4生成名为HookInjectorClass的类文件。
7.一种快速插桩的gradle编译系统,其特征在于,所述系统用于实现根据权利要求1-6任一项所述的方法,系统包括:
声明模块,根据自定义注解对需要注入的类进行描述,以自定义描述接口类;
文件生成模块,在预编译期间通过ksp生成不同插桩类型的实体集合;
插桩模块,根据实体集合通过 Gradle 编译期间对代码进行遍历插桩。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于杭州比智科技有限公司,未经杭州比智科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202211611995.6/1.html,转载请声明来源钻瓜专利网。
- 上一篇:密封水冷电机控制器
- 下一篇:一种高精度水体取样箱及取样方法