【0107】【项目实战】-【Android通用框架设计与完整电商APP开发】-【6】【代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)】

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 添加依赖

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

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

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

3.2 应用程序的逻辑

【登录逻辑】

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

 【登录页面回调基类】

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

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

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

 

【透明主题的定义】

【增加回调】

 

3.3 使用

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

【注意】

 3.4 调用的流程总结

 

posted @ 2018-03-30 16:03  OzTaking  阅读(589)  评论(0)    收藏  举报