Gradle插件、注解、javapoet和asm实战

本文介绍了Android实战项目ImplLoader,它解决不同Module间实例化类的问题。通过定义注解和使用编译时注解处理器,实现了类的自动加载。文章详细阐述了库的实现原理,包括注解定义、编译处理、运行时反射,并讨论了注解处理器调试、Gradle Transform插件上传与引用、Kotlin支持等问题。
摘要由CSDN通过智能技术生成

实战库ImplLoader的介绍

首先来介绍一下实战项目的所解决的问题 : 当一个Android工程中如果已经使用不同的module来做业务隔离。那我们就可能有这种需求,module1想实例化一个module2的类,一般要怎么解决呢?

  • module1依赖module2
  • module2的这个类沉到底层库,然后module1module2都使用这个底层库。
  • ....等

下面来介绍一个小库 : ImplLoader。可以很方便解决这个问题。只需这样使用即可:

  1. 使用@Impl标记需要被加载的类
//`module2`中的类:
@Impl(name = "module2_text_view")
public class CommonView extends AppCompatTextView {

}
  1. 使用 ImplLoader.getImpl("module2_text_view") 来获取这个类
public class Module1Page extends LinearLayout {
    public Module1Page(@NonNull Context context) {
        super(context);
        init();
    }

    private void init() {
        //根据name,获取需要加载的类
        View module1Tv = ImplLoader.getView(getContext(), "module2_text_view");
        addView(module1Tv);
    }
}
  1. 初始化ImplLoader
    ImplLoader.init()

库的代码放在: https://github.com/SusionSuc/ImplLoader

为什么要写这个库 ?

主要是为了练手

在阅读WMRouterARouter源码时发现这两个库都用到了自定义注解自定义gradle插件Gradle Transfrom APIjavapoet和asm库。而我对于这些知识很多我只是了解个大概,或者压根就没听说过。
因此ImplLoader这个库主要是用来熟悉这个知识的。当然这个库的实现思路主要参考WMRouterARouter

库的实现原理

用下面这种图概括一下:

 

其实整个库代码并不多,不过实现起来用到的东西不少,如果一些你使用的不熟悉,可以先看一下:

https://github.com/SusionSuc/AdvancedAndroid

这个库是用来总结我这两年Android所学和对自我提高的一个库。里面的文章我写的很用心,会一直频繁更新。

下面简单过一下ImplLoader的实现代码(只看主流程):

定义@Impl注解

@Retention(RetentionPolicy.RUNTIME)
public @interface Impl {
    String name() default "";
}

编译时注解处理器ImplAnnotationProcessor, 扫描@Impl,并生成ImplInfo_XXX.java

<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值