精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Android Studio中使用apt

移動開發 Android
你還在對著枯燥的重復代碼一味復制粘貼嗎?這樣跟搬磚有何區別?你是否曾想過:你用代碼編寫出一個自動化的APP,但為何代碼本身卻缺少了活力?掌握Android-apt,杜絕重復代碼,讓你寫代碼如寫詩般優雅。

一、前言

你還在對著枯燥的重復代碼一味復制粘貼嗎?這樣跟搬磚有何區別?你是否曾想過:你用代碼編寫出一個自動化的APP,但為何代碼本身卻缺少了活力?掌握Android-apt,杜絕重復代碼,讓你寫代碼如寫詩般優雅。

二、何為apt?

apt意為:annotation processing tool(注解處理工具),這家伙可神奇了,它能通過注解,在編譯期自動生成特定的Java文件,實現自動編寫代碼。

問:有什么用?憑我自己本事能寫出來的代碼,為什么要自動化?

大哥,你這是又想施展你的復制粘貼大法了嗎?稍安勿躁,細看完這篇文章,你會愛上這家伙的。

鼎鼎大名的ButterKnife、Dagger2這兩個開源庫,相信你一定有聽過,你應該知道我為什么提到它們了吧。沒錯!這兩個開源庫都是基于apt的。

三、說了這么多,要怎么用啊?別急,我們先搭建環境(基于gradle插件2.2.0以上版本)

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里新建一個注解類

  1. @Retention(RetentionPolicy.SOURCE) 
  2. @Target(ElementType.METHOD) 
  3. public @interface Test { 
  4.     String value(); 
  5.  

2.在apt module里新建一個注解處理類,繼承于AbstractProcessor

  1. public class TestProcessor extends AbstractProcessor{ 
  2.     @Override 
  3.     public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) { 
  4.         return false
  5.     } 
  6.  

3.既然說apt是要自動生成java文件,那我們就需要擬構出一個目標類。假設我們要生成這樣一個類

  1. public class TestClass { 
  2.  
  3.     public static void main(String[] args){ 
  4.         System.out.println("Hallo world!"); 
  5.     } 
  6.  
  7.  

4.操作注解處理類,生成目標java文件

  1. @AutoService(Processor.class) 
  2. @SupportedAnnotationTypes({ 
  3.         "com.aop.anno.Test" 
  4. }) 
  5. public class TestProcessor extends AbstractProcessor{ 
  6.  
  7.     @Override 
  8.     public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) { 
  9.  
  10.         //生成TestClass類 
  11.         TypeSpec.Builder tb = TypeSpec.classBuilder("TestClass"
  12.                 .addModifiers(Modifier.PUBLIC); 
  13.  
  14.         //生成main方法 
  15.         MethodSpec.Builder mb = MethodSpec.methodBuilder("main"
  16.                 .addModifiers(Modifier.PUBLIC, Modifier.STATIC
  17.                 .returns(void.class) 
  18.                 .addParameter(String[].class, "args"); 
  19.  
  20.         //生成代碼塊,并添加到main方法中 
  21.         for(TypeElement e : ElementFilter.typesIn(roundEnv.getElementsAnnotatedWith(Test.class))){ 
  22.             CodeBlock cb = CodeBlock.builder() 
  23.                     .addStatement("$T.out.println(\"$L + $L\")", System.class,  
  24.                     e.getAnnotation(Test.class).value(), e.getSimpleName()) 
  25.                     .build(); 
  26.             mb.addCode(cb); 
  27.         } 
  28.  
  29.         tb.addMethod(mb.build()); 
  30.  
  31.         JavaFile jf = JavaFile.builder("com.example.apt", tb.build()).build(); 
  32.         //將代碼寫入java文件中 
  33.         try { 
  34.             jf.writeTo(processingEnv.getFiler()); 
  35.         } catch (IOException e) { 
  36.             e.printStackTrace(); 
  37.         } 
  38.  
  39.         return true
  40.     } 
  41.  

大致說下步驟:

(1)添加@AutoService(Processor.class)注解,這個注解會自動在指定路徑下生成一個配置文件:

apt/build/classes/main/META-INF/services/javax.annotation.processing.Processor;

(2)添加@SupportedAnnotationTypes注解,配置這個類所要處理的注解類型。(傳入String類型參數,格式為:包名+類名);

(3)采用javapoet書寫代碼構建邏輯,具體用法去這里看看;

(4)生成代碼塊的主要邏輯是:遍歷所有被@Test注解過的類,取出注解內容及類名打印出來。

5.在類上添加@Test注解,這里就用MainActivity來試試

  1. @Test("abc"
  2. public class MainActivity extends AppCompatActivity { 
  3.  
  4.     @Override 
  5.     protected void onCreate(Bundle savedInstanceState) { 
  6.         super.onCreate(savedInstanceState); 
  7.         setContentView(R.layout.activity_main); 
  8.     } 
  9.  

6.rebuild工程,在app/build/generated/source/apt/debug路徑下找到目標java文件。至此,大功告成   

 

TestClass代碼如下:

  1. public class TestClass { 
  2.   public static void main(String[] args) { 
  3.     System.out.println("abc + MainActivity"); 
  4.   } 
  5.  

五、然而并沒什么卵用?

確實,到此為止,我們確實是用了幾十行代碼去生成了一個5行代碼的TestClass,這種操作來說看起來可以用4個字來形容:閑得蛋疼。

然而,接下來的操作,會讓你耳目一新。首先我們新建幾個測試類,假如我們新建了這樣4個測試類:ActivityA,ActivityB,ActivityC,ActivityD,并且都給他們加上注解@Test。然后rebuild一下,你會發現,我們的TestClass變了樣:

  1. public class TestClass { 
  2.   public static void main(String[] args) { 
  3.     System.out.println("A + ActivityA"); 
  4.     System.out.println("B + ActivityB"); 
  5.     System.out.println("C + ActivityC"); 
  6.     System.out.println("D + ActivityD"); 
  7.     System.out.println("abc + MainActivity"); 
  8.   } 

恍然大悟!原來,是這么玩的!這時候,你是否已經感覺到apt的魅力了呢?是的,它能幫你干掉重復代碼,讓你杜絕掉復制粘貼。 

責任編輯:龐桂玉 來源: Android開發中文站
相關推薦

2020-11-04 18:13:24

DebianUbuntuapt-cache命令

2016-08-10 11:01:58

UbuntuLinuxShell

2013-01-07 13:54:17

Android開發JUnit單元測試

2014-06-24 10:34:08

Android Stu教程

2013-05-17 10:48:40

GoogleAndroid Stu

2022-08-04 18:34:18

Ubuntuaptupgrade 命令

2022-07-25 10:20:39

apt 命令Ubuntu軟件包

2010-06-21 15:04:00

Linux apt

2020-12-15 10:20:48

Facebook攻擊惡意軟件

2020-06-28 13:56:01

UbuntuAptSynaptic

2013-03-28 10:34:29

2011-01-07 09:01:17

Visual Stud

2012-02-13 14:10:11

MonoTouchiOS應用Visual Stud

2012-02-13 14:22:22

MonoTouchiOS應用Visual Stud

2014-07-17 11:36:27

Android Stu使用教程

2014-02-26 11:11:05

AndroidStudio開發環境

2012-12-27 13:04:17

Android開發SQLite數據庫

2023-12-22 09:11:45

AndroidNFC移動開發

2025-04-16 10:12:13

2011-11-16 10:25:34

點贊
收藏

51CTO技術棧公眾號

亚洲大胆av| 卡通动漫精品一区二区三区| 国产精品传媒视频| 91精品综合视频| 精品午夜福利在线观看| 色橹橹欧美在线观看视频高清 | 国产精品老女人| 一区二区三区韩国免费中文网站| 欧美日韩日本视频| 国产真人做爰毛片视频直播| 极品白浆推特女神在线观看 | 狠狠色狠色综合曰曰| 亚洲精品视频一二三| 亚洲精品无码久久久| 久久婷婷激情| 欧美激情中文字幕在线| 美女av免费看| 亚洲aaa级| 日韩欧美一区二区免费| 成人羞羞国产免费网站| 91cn在线观看| 中文字幕第一区综合| 国产日韩三区| 国产丝袜在线视频| 日韩制服丝袜av| 91高潮在线观看| 秋霞欧美一区二区三区视频免费| 日韩av中文字幕一区| 欧美一卡二卡在线观看| 天天插天天操天天射| sm捆绑调教国产免费网站在线观看| 国产精品免费久久久久| 欧美日韩一区综合| 亚洲欧美日韩免费| 成人黄色一级视频| 91丨九色丨国产| 国产一区二区视频免费观看| 日韩影院精彩在线| 日本成人免费在线| 天天爽夜夜爽夜夜爽精品| 综合天天久久| 精品国偷自产在线视频| 日韩av在线看免费观看| 欧美交a欧美精品喷水| 日韩精品一区二区三区老鸭窝| www.99r| 国产韩日精品| 欧美性色黄大片| 动漫av免费观看| 345成人影院| 日韩欧美亚洲综合| 日本在线视频www| 一根才成人网| 日本韩国欧美国产| 国产精品动漫网站| 欧美极品免费| 欧美性高清videossexo| 久久午夜夜伦鲁鲁一区二区| 肉色欧美久久久久久久免费看| 色综合久久久网| 亚洲精品无码国产| 一区二区精品伦理...| 亚州成人在线电影| 337p粉嫩大胆噜噜噜鲁| av资源亚洲| 欧美中文字幕一区二区三区| 在线观看免费黄网站| 欧美亚洲人成在线| 欧美一区二区三级| 一级黄色电影片| 欧美成人专区| 亚洲偷欧美偷国内偷| 精品一区二区三孕妇视频| 国产精品麻豆久久| 欧美日韩xxxxx| 91精品国产乱码在线观看| 午夜在线a亚洲v天堂网2018| 日韩免费在线免费观看| 中文字幕 国产| 国产麻豆欧美日韩一区| 国产乱码精品一区二区三区不卡| 四虎影视在线播放| 国产精品污网站| 国风产精品一区二区| 国产美女情趣调教h一区二区| 五月天久久比比资源色| 国产视频在线视频| 日韩成人在线看| 精品一区二区三区四区| 久久爱一区二区| 夜夜嗨一区二区三区| 国产精品日韩av| 成人久久精品人妻一区二区三区| 97精品电影院| 日本福利视频导航| 9lporm自拍视频区在线| 欧美视频在线一区| 国产一卡二卡三卡四卡| 精品产国自在拍| 欧美肥臀大乳一区二区免费视频| 好看的av在线| 热久久一区二区| 国产91免费视频| av在线三区| 午夜不卡在线视频| 天天干天天色天天干| 日韩欧美四区| 欧美成人精品在线播放| 日韩国产成人在线| 成人禁用看黄a在线| 杨幂一区欧美专区| 奇米777日韩| 精品99999| 青花影视在线观看免费高清| 欧美亚洲专区| 国产精品一区在线观看| 久久综合之合合综合久久| 欧美性猛交xxxx乱大交蜜桃| 黑人无套内谢中国美女| 欧美电影免费观看高清| 日本高清不卡在线| 人妻一区二区三区| 亚洲黄色小视频| 欧美国产日韩另类| 国模精品一区| 欧美亚洲国产视频| 人妻少妇精品无码专区久久| 亚洲激情六月丁香| 91视频福利网| 久久久久久久久丰满| 国产精品电影网| 欧洲视频在线免费观看| 五月婷婷激情综合| 日韩成人av影院| 欧美在线国产| 成人性教育视频在线观看| h视频在线免费| 日本久久电影网| 国产又粗又猛又爽视频| 免费永久网站黄欧美| 精品午夜一区二区| 黄色的视频在线观看| 日韩视频免费观看高清完整版 | 97精品视频在线看| 国产精品午夜视频| 91在线导航| 欧美日本一区二区| 国产一区在线观看免费| 蜜桃视频免费观看一区| 亚洲精品一区二区三区av| 亚洲成人人体| 日韩在线视频播放| 国产乱淫av免费| 亚洲精品老司机| 最新版天堂资源在线| 亚洲私拍自拍| 好看的日韩精品| 亚洲妇女成熟| 国产亚洲日本欧美韩国| 羞羞色院91蜜桃| 亚洲视频一区在线观看| 韩国三级丰满少妇高潮| 国产精品久久| 久久99精品久久久久久久青青日本| av福利在线导航| 亚洲色图五月天| 在线观看国产一区二区三区| 中文字幕亚洲一区二区va在线| 一区二区三区欧美精品| 国内视频精品| 欧美日韩精品免费在线观看视频| 国产精品毛片久久久久久久久久99999999| 在线色欧美三级视频| 国产一区二区在线不卡| 亚洲国产日韩精品| 四虎影成人精品a片| 麻豆免费精品视频| 欧美高清中文字幕| 在线观看欧美理论a影院| 国产精品日韩在线一区| av免费在线免费观看| 亚洲精品久久久久中文字幕欢迎你 | 一区二区亚洲| 日产国产精品精品a∨| 久久国产精品美女| 69**夜色精品国产69乱| 日韩美女网站| 亚洲国产精品999| 日韩乱码一区二区三区| 一二三四区精品视频| 成年人网站免费在线观看| 精东粉嫩av免费一区二区三区| 草草草视频在线观看| 中文字幕av一区二区三区人| 成人午夜激情网| 中文字幕成在线观看| 久久久精品2019中文字幕神马| 污视频软件在线观看| 欧美人动与zoxxxx乱| 日韩不卡视频在线| 亚洲欧美一区二区三区国产精品| 亚洲人人夜夜澡人人爽| 激情欧美一区二区| 日韩中文字幕在线视频观看| 91视频一区| 久久综合一区| 亚洲综合网站| 国产欧美va欧美va香蕉在线| 日韩电影免费看| 欧美另类极品videosbest最新版本| 亚洲AV成人无码一二三区在线| 欧美一区三区二区| 青娱乐在线免费视频| 亚洲成人中文在线| 日本妇女毛茸茸| 国产精品天天摸av网| 精品黑人一区二区三区观看时间| 国产精品自在在线| 午夜免费福利视频在线观看| 久久国产99| 国产午夜福利在线播放| 欧美在线不卡| 一级一片免费播放| jlzzjlzz亚洲女人| 免费一区二区三区| 噜噜噜狠狠夜夜躁精品仙踪林| 亚洲va欧美va国产综合剧情| 久久精品97| 国产美女久久精品| 日本不良网站在线观看| 韩剧1988免费观看全集| jizz性欧美10| 久久久精品欧美| 午夜视频成人| 日韩中文字幕精品| 91在线视频| 日韩中文字幕在线视频| 中文日本在线观看| 神马久久久久久| √天堂资源地址在线官网| 亚洲欧美日韩精品久久亚洲区| 香蕉国产在线视频| 日韩禁在线播放| 四虎影院在线域名免费观看| 亚洲国产日韩精品在线| 黄色av中文字幕| 亚洲国产精品成人精品| 欧洲av在线播放| 精品亚洲男同gayvideo网站| 青青青草原在线| 亚洲人成在线观| 国产女人在线观看| 在线观看欧美成人| 永久免费在线观看视频| 久久精品久久久久久| a级在线观看| 国产综合在线看| 日韩伦理精品| 国产精品av在线| 欧美一区=区三区| 91入口在线观看| 美女av一区| 日本不卡二区高清三区| 日韩在线欧美| 国产欧美精品aaaaaa片| 亚洲理伦在线| 中文字幕国产传媒| 国精产品一区一区三区mba桃花| 中文字幕亚洲影院| 粉嫩在线一区二区三区视频| 国产成人无码一区二区在线观看| 久久精品夜色噜噜亚洲a∨| 国产欧美一区二区三区在线观看视频| 国产精品久久久久久久久果冻传媒 | 精品成人av一区| 国产一级片av| 日韩午夜中文字幕| 天堂a中文在线| 日日骚久久av| 成年人国产在线观看| 日本高清不卡在线| 精品一区二区三区中文字幕| 国产一区二区在线观看免费播放| 国产欧美日韩在线一区二区| av动漫免费观看| 国产精品一页| 中文字幕线观看| av爱爱亚洲一区| 国产小视频你懂的| 香蕉加勒比综合久久| 精品国产青草久久久久96| 日韩欧美aaaaaa| 黄色免费在线播放| 九九热精品视频| 91精品影视| 国产精品v欧美精品∨日韩| 国产欧美日韩在线一区二区| 欧美国产视频一区| 日产欧产美韩系列久久99| 美女久久久久久久久| 国产精品传媒视频| 男人天堂av在线播放| 精品少妇一区二区三区视频免付费 | 亚洲男男av| 麻豆av一区二区三区| 综合久久十次| 最近中文字幕一区二区| 成人激情免费电影网址| www欧美com| 欧美亚洲综合一区| 天天摸天天干天天操| 欧美成人激情图片网| 99精品在免费线偷拍| 精品欧美一区二区精品久久| 91精品亚洲| 久久久久久蜜桃一区二区| 久久婷婷久久一区二区三区| 免费人成年激情视频在线观看| 精品视频1区2区| 国产在线三区| 欧美亚洲国产日本| 国产精品极品国产中出| 国产一二三四五| 精品写真视频在线观看| 国产精品一区二区亚洲| 一本一道综合狠狠老| 五月天婷婷视频| 性色av一区二区咪爱| 亚洲日本va| 8x8ⅹ国产精品一区二区二区| 精品综合久久久久久8888| 四虎成人免费影院| 色av成人天堂桃色av| 男人的天堂在线| 51视频国产精品一区二区| 极品尤物一区| 国产精品裸体瑜伽视频| 成人午夜视频福利| 久久久久久久9999| 日韩精品中午字幕| 中文字幕中文字幕在线十八区 | 精品国产九九九| 欧美成人午夜免费视在线看片| 高清国产一区二区三区四区五区| 亚洲人成77777| 免费观看在线色综合| 手机看片国产日韩| 欧美老女人在线| www在线视频| 国产精品免费看一区二区三区| 亚洲无吗在线| 国产精品无码一区二区三| 黑人巨大精品欧美一区二区三区| 日本五码在线| 国产成人久久久精品一区| 欧美理论在线播放| 午夜剧场高清版免费观看| 中文字幕在线不卡一区二区三区| 国产又粗又大又爽| 精品中文字幕在线2019| 凹凸成人在线| 午夜肉伦伦影院| 国产精品乱码一区二三区小蝌蚪| 国产情侣av在线| 久久久久久尹人网香蕉| 天堂网av成人| 天天插天天操天天射| 亚洲精品国产精华液| 天天干天天爱天天操| 国产精品免费观看在线| 91精品秘密在线观看| 国产黑丝一区二区| 欧美午夜不卡视频| 亚洲区欧洲区| 久久综合精品一区| 紧缚捆绑精品一区二区| 国产精品23p| 亚洲人成人99网站| 成人在线视频www| 免费看一级大黄情大片| 国产精品网站在线播放| 成人午夜免费福利| 日本欧美中文字幕| 亚洲视频电影在线| 三级黄色片网站| 91精品国产综合久久福利软件 | 欧美日韩视频免费播放| 1024免费在线视频| 精品国产乱码久久久久| 青青草国产精品亚洲专区无| 久久黄色小视频| 一区二区三区久久精品| 亚洲综合网狠久久| 日韩精品你懂的| 五月天丁香久久| 精品国产白色丝袜高跟鞋| 欧美成人在线免费观看| 国产酒店精品激情| 99re国产在线| 久久久亚洲国产天美传媒修理工|