云炬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(微信登录和微信支付)

 本节的内容就是要绕过这个限制。使用到的黄油刀的模仿;

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

回到顶部

1.2 butterKnifer的元注解

【说明】模仿butterknife完成微信的入口的解释器,注解和代码的提取;

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

回到顶部

1.3 模仿的butterKnifer的元注解

【主要讲解的内容】基于butterknife的元注解的原理,annimotionprocessor生成我们所需要的代码;进而绕过微信的限制,最大限度的提高代码的封装方式;

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

【注意】此包是java类型的包,如果是library、application,否则无法查找到包AbstractProcessor;

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

【参考源码】

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

【引入依赖】

 云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

【将程序中已经注解过的类的类型的传递到集合】

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

【引入google的类】

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

【增加注解】生成动态信息

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

【扫描方法】扫描每个类,每个注解的东西;

 云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

回到顶部

2. 通过注解生成指定模板的代码

回到顶部

2.1 通过注解生成指定模板的代码

【扫描每个注解标注的东西】首先生成EntryAnnimitor标注的注解,生成微信的EntryAcitivity;

解析的代码和扫描的代码分开;代码解析器只能通过循环代码环境当中的内容,一层层的解析,这些处理是在编译期间完成的,不会影响性能;

 【visitor的生成】相当于访问器,相当与属性、注解的类、变量、方法中传入的值然后取出来,

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

【找出注解的类的源信息】

 云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

【找出注解的类的源信息并且生成代码】

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

回到顶部

2.2 使用注解类的扫描查找功能

回到顶部

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

回到顶部

2.3 增加支付和注册的代码的查找

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

【复制生成pay/register的visitor文件】

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

【添加pay和register的功能】

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

回到顶部

2.4 效果演示

【模板类的生成】

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

【调用】

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

【添加注解】

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

 【编译工程】

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

【生成的代码】

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

回到顶部

3. 通过代码生成器,生成微信登录代码,绕过微信包名限制

回到顶部

3.1 添加依赖

【网址】https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=1417751808&token=&lang=zh_CN

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

【说明】需要企业提前注册好appId和key;

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

【在应用程序中加入全局的acitivity 上下文】在应用程序的onCreate方法中初始化该模块;

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

回到顶部

3.2 应用程序的逻辑

【登录逻辑】

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

【说明】在点击登录之后会出现微信的登录页面,是微信回调的页面;现在打破了微信的定制(需要在目录下建立一个回调activity);

 【登录页面回调基类】

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

【登录页面-子类继承父类】com.flj.latte.wechat.BaseWXEntryActivity

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

 【回到专门生成代码的模板类】-对于登录返回界面的处理,市面大多数的应用都是这么处理的;

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

【自动生成文件,对入口文件添加配置项】

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

 云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

【透明主题的定义】

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

【增加回调】

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

 云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

回到顶部

3.3 使用

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

【测试效果演示】【需要在真机演示】生成必要的签名文件;

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

【注意】

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

 

回到顶部

 3.4 调用的流程总结

 云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)

云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)