Android Gradle插件开发(ASM字节码插桩&AutoRegister基本原理分析)1

通过本系列课能学习到的东西

1、Android Gradle插件开发配置

2、Android Gradle插件调试

3、Android Gradle自定义Transform扫描Class文件、Jar文件

4、通过ASM完成字节码插入

5、运行插件Demo看整体效果

6、基于以上知识,分析AutoRegister基本原理

AutoRegister地址

AutoRegister Github地址

AutoRegister Giee地址

AutoRegister 大体介绍

此插件要解决的问题是:

工厂模式中工厂创建的产品需要注册到工厂类中,每新增一个产品要修改一次工厂类的代码

策略模式中所有策略需要注册到管理类中,每新增一种策略需要修改一次管理类的代码

接口及其管理类在基础库中定义,其实现类在不同的module中,需要在主工程中进行注册,每新增一个实现类注册需要手动添加

比如在做组件化开发时,组件注册到主app中需要在主app的代码中import组件类进行注册,代码侵入性强

使用此插件后,在编译期(代码混淆之前)扫描所有打到apk包中的类,将符合条件的类收集起来,并生成注册代码到指定的类的static块中,自动完成注册

功能简介

在apk打包过程中,对编译后的所有class(包含jar包中的class)进行扫描,将 scanInterface的实现类 或 scanSuperClasses的子类扫描出来,并在 codeInsertToClassName 类的 static块 中生成注册代码,如demo中:

public class CategoryManager {
  static
  {
    CategoryManager.register(new CategoryA()); //scanInterface的实现类
    CategoryManager.register(new CategoryB()); //scanSuperClasses的子类
  }
}
apply plugin: 'auto-register'
autoregister {
   registerInfo = [
       [
           'scanInterface'             : 'com.billy.app_lib_interface.ICategory'
           , 'scanSuperClasses'        : ['com.billy.android.autoregister.demo.BaseCategory']
           , 'codeInsertToClassName'   : 'com.billy.app_lib_interface.CategoryManager'
           //未指定codeInsertToMethodName,默认插入到static块中,故此处register必须为static方法
           , 'registerMethodName'      : 'register' //
           , 'exclude'                 : [
               //排除的类,支持正则表达式(包分隔符需要用/表示,不能用.)
               'com.billy.android.autoregister.demo.BaseCategory'.replaceAll('\\.', '/') //排除这个基类
           ]
       ],
       [
           'scanInterface'             : 'com.billy.app_lib.IOther'
           , 'codeInsertToClassName'   : 'com.billy.app_lib.OtherManager'
           , 'codeInsertToMethodName'  : 'init' //非static方法
           , 'registerMethodName'      : 'registerOther' //非static方法
       ]
   ]
}

本节课程就是大体介绍一下,下节课继续

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容