云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)
阅读目录
1.编写自己的元注解和annotationProcessor
1.1 微信登录说明
1.2 butterKnifer的元注解
1.3 模仿的butterKnifer的元注解
2. 通过注解生成指定模板的代码
2.1 通过注解生成指定模板的代码
2.2 使用注解类的扫描查找功能
2.3 增加支付和注册的代码的查找
2.4 效果演示
3. 通过代码生成器,生成微信登录代码,绕过微信包名限制
3.1 添加依赖
3.2 应用程序的逻辑
3.3 使用
3.4 调用的流程总结
1.编写自己的元注解和annotationProcessor
1.1 微信登录说明
【说明】微信登录比较坑,在官网文档中说明,必须在app下建立wxapi的目录,然后建立两个activity(微信登录和微信支付)
本节的内容就是要绕过这个限制。使用到的黄油刀的模仿;
1.2 butterKnifer的元注解
【说明】模仿butterknife完成微信的入口的解释器,注解和代码的提取;
1.3 模仿的butterKnifer的元注解
【主要讲解的内容】基于butterknife的元注解的原理,annimotionprocessor生成我们所需要的代码;进而绕过微信的限制,最大限度的提高代码的封装方式;
【注意】此包是java类型的包,如果是library、application,否则无法查找到包AbstractProcessor;
【参考源码】
【引入依赖】
【将程序中已经注解过的类的类型的传递到集合】
【引入google的类】
【增加注解】生成动态信息
【扫描方法】扫描每个类,每个注解的东西;
2. 通过注解生成指定模板的代码
2.1 通过注解生成指定模板的代码
【扫描每个注解标注的东西】首先生成EntryAnnimitor标注的注解,生成微信的EntryAcitivity;
解析的代码和扫描的代码分开;代码解析器只能通过循环代码环境当中的内容,一层层的解析,这些处理是在编译期间完成的,不会影响性能;
【visitor的生成】相当于访问器,相当与属性、注解的类、变量、方法中传入的值然后取出来,
【找出注解的类的源信息】
【找出注解的类的源信息并且生成代码】
2.2 使用注解类的扫描查找功能
2.3 增加支付和注册的代码的查找
【复制生成pay/register的visitor文件】
【添加pay和register的功能】
2.4 效果演示
【模板类的生成】
【调用】
【添加注解】
【编译工程】
【生成的代码】
3. 通过代码生成器,生成微信登录代码,绕过微信包名限制
3.1 添加依赖
【说明】需要企业提前注册好appId和key;
【在应用程序中加入全局的acitivity 上下文】在应用程序的onCreate方法中初始化该模块;
3.2 应用程序的逻辑
【登录逻辑】
【说明】在点击登录之后会出现微信的登录页面,是微信回调的页面;现在打破了微信的定制(需要在目录下建立一个回调activity);
【登录页面回调基类】
【登录页面-子类继承父类】com.flj.latte.wechat.BaseWXEntryActivity
【回到专门生成代码的模板类】-对于登录返回界面的处理,市面大多数的应用都是这么处理的;
【自动生成文件,对入口文件添加配置项】
【透明主题的定义】
【增加回调】
3.3 使用
【测试效果演示】【需要在真机演示】生成必要的签名文件;
【注意】
3.4 调用的流程总结