安卓Gradle插件开发-ASM字节码修改-AutoRegister实现1

通过这个视频可以学到

1.gradle插件开发
2.gradle插件调试
3.gradle Transform任务的执行方式
4.ASM字节码修改

现在我们先看看AutoRegister是啥
https://gitee.com/luckybilly/AutoRegister
他是一个自动注册插件
作用
1.自动注册 咱们工厂模式生产产品都要注册到工厂里去,或者策略模式也是要同样的操作,但是有一个特点我们每次增加一个产品或者策略就要修改工厂类是不是很麻烦
如果不懂上面说的啥 我们看例子

public class CategoryManager {
static
{
CategoryManager.register(new CategoryA()); //scanInterface的实现类
CategoryManager.register(new CategoryB()); //scanSuperClasses的子类
}
}

这里增加了两个产品吧 分别是CategoryA和CategoryB 假如我们要增加一个CategoryC那是不是应该这样做
public class CategoryManager {
static
{
CategoryManager.register(new CategoryA()); //scanInterface的实现类
CategoryManager.register(new CategoryB()); //scanSuperClasses的子类
CategoryManager.register(new CategoryC());
}
}
没错管理类必定要改,但是你一旦用了咱们这个AutoRegister插件,它就会在构建apk的时候修改你的字节码,自动的完成产品注册类似加这个 CategoryManager.register(new CategoryC());

具体怎么做到的 我们等等再说

2.路由注册
我们很清楚路由注册的特别最好支持跨module模块,对吧,而且对于第组件化开发来说,有个特点,很多组件对外就是aar,这样导致很多路由框架不支持,典型的就是Arouter,不过也有解决方案,这里我们不说,主要说的是AutoRegister能有效避免,以为他会在打包apk的时候遍历所有的源文件,这样我们就有机会完成代码注入,很多人把这个操作叫做Aop

好了 我们简单讲讲原理 ,后面一节课就要具体去实现

原理其实就是我上面说的
public class CategoryManager {
static
{
CategoryManager.register(new CategoryA()); //scanInterface的实现类
CategoryManager.register(new CategoryB()); //scanSuperClasses的子类
}
}
通过ASM提供的api变成这样
public class CategoryManager {
static
{
CategoryManager.register(new CategoryA()); //scanInterface的实现类
CategoryManager.register(new CategoryB()); //scanSuperClasses的子类
CategoryManager.register(new CategoryC());
}
}

仅此而已

哦了 等下节课开始

你可能感兴趣的:(安卓Gradle插件开发-ASM字节码修改-AutoRegister实现1)