Android|Android APT:Eclipse下APT使用
001概述
文章将介绍如何在eclipse下使用apt开发,结合JakeWharton大神的javapoet让apt开发飞起来。
002背景
栗子:同一个父类,子类继承完后,每次都要拷贝黏贴,然后重写,时间花得太不值(⊙o⊙)…
同样的还有创建{实体类}的时候,需要get、set,使用gson的时候还要@SerializedName("")等等都是比较花时间的。
文章图片
图1 003构建
① 创建一个Android工程(当然Java工程也是可以的),如图:
文章图片
工程结构 ② 将JakeWharton大神的POET代码移植过来,在工程目录下创建META-INFO,如上图提示。
注意:javax.annotation.processing.Processor文件的内容是com.king.annotation.KingProcessor (KingProcessor extends AbstractProcessor),因为我们没有使用@AutoService(Processor.class)注解去自动生成 javax.annotation.processing.Processor,所以想让eclipse-apt识别到,就需要加入这个文件;大家不凡也可以去看JakeWharton大神的butterknife-7.0.1.jar包,其中也可以看到META-INFO文件夹,只是javax.annotation.processing.Processor的内容是大神自己的Processor。
文章图片
对比图 ③ 创建注解
文章图片
注解代码 这边只对Class作用所以,Retention就直接使用CLASS类型
【Android|Android APT:Eclipse下APT使用】④ 创建Processor(DHModelProcessor)
这个类是最重要的类了^_^,其中使用到JakeWharton大神的POET,对POET框架不了解的可以先去熟悉下:javapoet
下面一个个讲怎么拼凑:
// 获取所有被DHModel注解的元素
for (Element element : roundEnv.getElementsAnnotatedWith(DHModel.class)) {
DHModel model = element.getAnnotation(DHModel.class);
-------------------------拿到注解对象
文章图片
生成getURL方法,$T和$S分别对应类和字符串,重点就是这个renturn了,最后生成图1中的getURL方法
文章图片
同样生成getType()、getClazz()、saveJsonType()方法
文章图片
用了一个for循环控制了请求参数,生成doNet方法
文章图片
这个生成Class,其中添加了一个构造函数,然后将所有的方法加入到这个Class构造器中
文章图片
输出文件^_^ 这里讲下需要注意的地方:
<1> 例如我需要拿到一个Class,那么我们需要使用 ClassName,例如取个activity类:
ClassName mActivityClassName = ClassName.get("android.app", "Activity");
// Activity类
<2> $T和$S要对应正确,不然会出错
<3> 巧用mMessager.printMessage(Diagnostic.Kind.ERROR, String.format(msg, args), e);
来调试代码。
004打包
利用Eclipse---->export打jar包工具,生成jar包
文章图片
打jar包 注意:重新打包的时候不要使用覆盖的方式,否则jar包会出问题,怀疑是编译器的问题。
005加入jar包
加打完的jar包放入主工程libs目录中,然后如下图点击Add JARs添加jar包:
文章图片
006万事俱备
005步骤完成后,使用@DHModel(注解)
文章图片
注解使用 最后重新编译工程,在你设置的包路径下会生成对应的代码:
文章图片
【定义文件路径】中找到对应生成的代码 007成果
最终会看到自动生成好了的文件
文章图片
推荐阅读
- android第三方框架(五)ButterKnife
- Android中的AES加密-下
- 带有Hilt的Android上的依赖注入
- android|android studio中ndk的使用
- Android事件传递源码分析
- RxJava|RxJava 在Android项目中的使用(一)
- Android7.0|Android7.0 第三方应用无法访问私有库
- 深入理解|深入理解 Android 9.0 Crash 机制(二)
- android防止连续点击的简单实现(kotlin)
- Android|Android install 多个设备时指定设备