ImplLoader icon indicating copy to clipboard operation
ImplLoader copied to clipboard

业务代码解耦,轻松跨模块加载一个类。比如Fragement、View等

ImplLoader

当一个Android工程中如果已经使用不同的module来做工程隔离。那我们就可能有这种需求,module1想实例化一个module2的类。一般要怎么解决呢?

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

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(), "common_view");
        addView(module1Tv);
    }
}
  1. 初始化ImplLoader
    ImplLoader.init()

ImplLoader的实现以及特性

  • 使用 注解、gradle transform、asm、javapoet来实现
  • 使用简单,一个@Impl注解标注即可
  • 支持kotlin

引入ImplLoader