通過這個(gè)視頻可以學(xué)到
1.gradle插件開發(fā)
2.gradle插件調(diào)試
3.gradle Transform任務(wù)的執(zhí)行方式
4.ASM字節(jié)碼修改
現(xiàn)在我們先看看AutoRegister是啥
https://gitee.com/luckybilly/AutoRegister
他是一個(gè)自動注冊插件
作用
1.自動注冊 咱們工廠模式生產(chǎn)產(chǎn)品都要注冊到工廠里去,或者策略模式也是要同樣的操作脊串,但是有一個(gè)特點(diǎn)我們每次增加一個(gè)產(chǎn)品或者策略就要修改工廠類是不是很麻煩
如果不懂上面說的啥 我們看例子
public class CategoryManager {
static
{
CategoryManager.register(new CategoryA()); //scanInterface的實(shí)現(xiàn)類
CategoryManager.register(new CategoryB()); //scanSuperClasses的子類
}
}
這里增加了兩個(gè)產(chǎn)品吧 分別是CategoryA和CategoryB 假如我們要增加一個(gè)CategoryC那是不是應(yīng)該這樣做
public class CategoryManager {
static
{
CategoryManager.register(new CategoryA()); //scanInterface的實(shí)現(xiàn)類
CategoryManager.register(new CategoryB()); //scanSuperClasses的子類
CategoryManager.register(new CategoryC());
}
}
沒錯(cuò)管理類必定要改辫呻,但是你一旦用了咱們這個(gè)AutoRegister插件,它就會在構(gòu)建apk的時(shí)候修改你的字節(jié)碼琼锋,自動的完成產(chǎn)品注冊類似加這個(gè) CategoryManager.register(new CategoryC());
具體怎么做到的 我們等等再說
2.路由注冊
我們很清楚路由注冊的特別最好支持跨module模塊放闺,對吧,而且對于第組件化開發(fā)來說缕坎,有個(gè)特點(diǎn)怖侦,很多組件對外就是aar,這樣導(dǎo)致很多路由框架不支持谜叹,典型的就是Arouter匾寝,不過也有解決方案,這里我們不說荷腊,主要說的是AutoRegister能有效避免艳悔,以為他會在打包apk的時(shí)候遍歷所有的源文件,這樣我們就有機(jī)會完成代碼注入女仰,很多人把這個(gè)操作叫做Aop
好了 我們簡單講講原理 猜年,后面一節(jié)課就要具體去實(shí)現(xiàn)
原理其實(shí)就是我上面說的
public class CategoryManager {
static
{
CategoryManager.register(new CategoryA()); //scanInterface的實(shí)現(xiàn)類
CategoryManager.register(new CategoryB()); //scanSuperClasses的子類
}
}
通過ASM提供的api變成這樣
public class CategoryManager {
static
{
CategoryManager.register(new CategoryA()); //scanInterface的實(shí)現(xiàn)類
CategoryManager.register(new CategoryB()); //scanSuperClasses的子類
CategoryManager.register(new CategoryC());
}
}
僅此而已
哦了 等下節(jié)課開始