Android gradle编译时字节码处理

本文介绍了如何在Android应用中利用gradle在编译时进行字节码修改,通过javassist和ASM工具实现代码注入,详细阐述了开发自定义Gradle插件的步骤,包括在buildSrc中开发和发布插件,以及如何在App模块中使用该插件以在Activity的onCreate中动态添加弹出toast的功能。
摘要由CSDN通过智能技术生成

编译时字节码修改

android app的构建是使用gradle 工具,它提供给了开发者自定义编译期行为的能力。一般情况下,我们在transform阶段进行字节码的修改,插入,删除等操作。通过字节码处理,我们可以完成很多cool的事情,比如根据编译时注解,完成一些特定的操作等。

实现修改字节码的工具有:
javassist (如库 ‘org.javassist:javassist:3.27.0-GA’)
ASM ( 如库’com.android.tools.build:gradle:3.6.4’)

插件开发的一般步骤

  • 继承Plugin
class TestPlugin implements Plugin<Project> {

    @Override
    void apply(Project project) {
        System.out.println("========================");
        System.out.println("hello TestPlugin")
        System.out.println("========================")

        project.extensions.findByType(AppExtension.class).registerTransform(new MyTransform(project));
  • 自定义Transfrom
class MyTransform extends Transform {
   
    private Project project
    MyTransform(Project project) {
   
        this.project = project
    }
    @Override
    String getName() {
   
        return "MyTransform"
    }

    @Override
    Set<QualifiedContent.ContentType> getInputTypes() {
   
        return TransformManager.CONTENT_CLASS
    }

    @Override
    Set<? super QualifiedContent.Scope> getScopes() {
   
        return TransformManager.SCOPE_FULL_PROJECT
    }

    @Override
    boolean isIncremental() {
   
        return false
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值