一、媒介
你还在对着逝世板的反复代码一味复制粘贴吗?如许跟搬砖有何差别?你是否曾想过:你用代码编写出一个主动化的APP,但为何代码本身却缺乏了活力?控制Android-apt,杜绝反复代码,让你写代码如写诗般优雅。
二、何为apt?
apt意为:annotation processing tool(注解处理对象),这家伙可神奇了,它能经由过程注解,在编译期主动生成特定的Java文件,实现主动编写代码。
问:有什么竽暌姑?凭我本身本领能写出来的代码,为什么要主动化?
- @Test("abc")
- public class MainActivity extends AppCompatActivity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- }
- }
大年夜哥,你这是又想发挥你的复制粘贴大年夜法了吗?稍安勿躁,细看完这篇文┞仿,你会爱上这家伙的。
鼎鼎大年夜名的ButterKnife、Dagger2这两个开源库,信赖你必定有听过,你应当知道我为什么提到它们了吧。没错!这两个开源库都是基于apt的。
三、说了这么多,要怎么竽暌姑啊?别急,我们先搭建情况(基于gradle插件2.2.0以上版本)
【编辑推荐】
- Android安然防护之旅---应用"反调试"操作的几种筹划解析
- Android中导致内存泄漏的竟然是它----Dialog
- Android截屏与WebView长图分享经验总结
- 17位谷歌Android开辟专家是若何对待Kotlin的?
- 经由过程微信Android和iOS版看两大年夜体系差别
1.在android studio中新建一个Java module,用于存装注解处理逻辑,名字随便啦,反正我一般都取名:apt。很重要的事:在app module中添加注解处理依附:annotationProcessor project(‘:apt’)
(解释原因:因为android的module中不包含有apt相干类,是以须要新建一个java module来编写apt逻辑。什么?你不信?不信你写个类持续AbstractProcessor尝尝)
2.再次新建一个module(android、java都可以),用于存装注解,名字也随便,反正我这里取名为:anno,并且在app、apt的build.gradle文件下,添加依附compile project(‘:anno’)
(为什么要新建module去盛装注解类,而不放到app module或者apt module中去:最重要的原因就是app module与apt module不克不及直接互相依附,至于为什么不克不及直接依附,我就不细说了,总之一句话:不信你尝尝看就知道喽!)
3.在apt的build.gradle里,添加如下依附。到此,我们的情况设备工作就告一段落了。
(个中:1.auto-service是用于注解后主动在特定路径下生成设备文件;2.javapoet是用于合营apt便捷生成java文件的对象。信赖如许说来岁夜家还云里雾里,不要焦急,持续往下看)
四、情况搭建好了,接下来就是秀操作时光
1.起首,在anno module里新建一个注解类
- @Retention(RetentionPolicy.SOURCE)
- @Target(ElementType.METHOD)
- public @interface Test {
- String value();
- }
2.在apt module里新建一个注解处理类,持续于AbstractProcessor
- public class TestProcessor extends AbstractProcessor{
- @Override
- public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
- return false;
- }
- }
3.既然说apt是要主动生成java文件,那我们就须要拟构出一个目标类。
推荐阅读 Java关键字volatile的理解与正确使用 | 干货分享 其实面对膳绫擎的反例场景可以应用JDK1.5 java.util.concurrent.atomic中供给的原子包装类型来包管原子性操作
概述1、不合适应用volatile的场景(非原子性操作)Java说话中关键字 volatile 被>>>详细阅读 本文标题:Android Studio中使用apt 地址:http://www.17bianji.com/lsqh/35628.html 1/2 1