精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

在线观看麻豆| 中文字幕第一页在线视频| 亚洲精品一级片| 亚洲青色在线| 亚洲欧美精品伊人久久| 欧美性猛交xxx乱久交| 91在线观看| 国产麻豆视频一区| 欧美激情按摩在线| 加勒比一区二区| 日本在线一区| 超碰男人的天堂| 天堂中文最新版在线中文| 91日韩一区二区三区| 日韩av毛片网| 麻豆天美蜜桃91| 国产精品对白久久久久粗| 欧美性高潮床叫视频| 日本一区二区三区www| 久久精品精品电影网| 亚洲精品日本| 亚洲精品无码久久久| 日韩免费三级| 欧美色图免费看| 国产精品资源网站| 亚洲成人精品在线| www.日本xxxx| 伊人222成人综合网| 99久久久久久| 亚洲综合成人在线| 亚洲精品a区| 亚洲欧美日韩色| 欧美在线视频在线播放完整版免费观看| 中文字幕在线免费不卡| 久久久9色精品国产一区二区三区| 国产三区在线播放| 国产精品国产精品| 亚洲v中文字幕| 成人羞羞视频播放网站| 日韩成人在线资源| 国产乱码精品一区二区三区忘忧草| 嫩草影院一区二区三区| 国产成人精品久久| 国产福利一区二区三区视频| 飘雪影视在线观看免费观看| 色姑娘综合天天| 超碰日本道色综合久久综合| 波多野结衣91| 亚洲网站三级| av资源在线免费观看| 欧美激情精品久久久久| 欧美日韩国内| 国产 欧美 日韩 在线| 欧美一区二区视频17c | 国产农村妇女毛片精品久久麻豆 | 自拍偷拍精品| 丝袜美腿小色网| 国产日产久久高清欧美一区| 亚洲欧美日韩综合aⅴ视频| 国产成人免费9x9x人网站视频| 国产熟女高潮一区二区三区 | 中文字幕永久有效| 欧美日韩在线免费视频| 成人精品在线| 日本一卡二卡在线播放| 国产精品视频网| 亚洲综合欧美在线| 日韩久久一区二区三区| 精品欧美aⅴ在线网站| 国产一区二区片| 日本一本在线免费福利| 亚洲人精品午夜| 自拍偷拍一区二区三区| 成a人片在线观看| 1区2区3区精品视频| 亚洲欧美国产精品桃花| 色播五月激情五月| 大地资源网3页在线观看| 一区在线观看视频| 椎名由奈jux491在线播放| 幼a在线观看| 亚洲三级理论片| 日本一区二区三区四区五区六区| 国产无遮挡免费视频| 欧美 丝袜 自拍 制服 另类| 国产一区免费在线| 精品99一区二区三区| 99国产精品久久久久| 牛牛影视久久网| 特黄视频在线观看| 日本japanese极品少妇| 日本久久久久久久久久| 亚洲夜夜综合| 亚洲欧美欧美一区二区三区| 成人在线视频一区二区三区| 黄色片网站在线| 亚洲一区二区三区在线看| 成人一区二区免费视频| 国产精品迅雷| 欧美精品在线视频| 欧美熟妇精品一区二区| 亚洲精品蜜桃乱晃| 中文字幕日韩欧美| 青青草原在线免费观看| 亚洲永久网站| 国产精品私拍pans大尺度在线 | 91禁在线观看| 成人一级片网址| 青青草原亚洲| 大地资源网3页在线观看| 亚洲va国产va欧美va观看| 成年人在线看片| 日本综合精品一区| 亚洲欧美在线免费| 欧洲第一无人区观看| 免费在线亚洲| 亚洲尤物视频网| 国产精品视频123| 特黄特黄一级片| 国产一区二区在线视频播放| 亚洲xxxxx| 国产小视频国产精品| 亚洲一区在线视频观看| 大桥未久av一区二区三区中文| 一区二区三区自拍视频| 网友自拍视频在线| 麻豆一区二区99久久久久| 国产精品伦子伦免费视频| 国产麻豆91视频| 久久久久久97三级| 国产人妻人伦精品| 成人亚洲免费| 亚洲国产一区二区三区在线观看| 成年人免费视频播放| 影音先锋在线一区| 91精品在线观| 高清美女视频一区| 亚洲成人免费在线| 91网址在线观看精品| 亚洲综合图色| 91av视频在线免费观看| 亚洲视频久久久| 久久亚洲免费视频| 国产欧美精品aaaaaa片| 久久影院一区二区三区| 中文欧美在线视频| 自拍偷拍校园春色| 97精品久久久午夜一区二区三区| 国产一级黄色录像片| 亚洲欧洲二区| 在线观看国产成人av片| 精品成人av一区二区在线播放| 国产精选一区二区三区| 日本中文不卡| 国产精品无码久久久久| 伊人青青综合网站| 波多野结衣在线观看视频| 99精品国产热久久91蜜凸| 国产欧美日韩网站| av日韩精品| 久久久亚洲国产天美传媒修理工| 精品久久久久久亚洲综合网站| 亚洲欧美一区二区不卡| 蜜桃福利午夜精品一区| 91视频久久| 国产精品一区二区三区毛片淫片| 色视频精品视频在线观看| 亚洲一区日韩精品中文字幕| 久久久国产精品久久久| 欧美破处大片在线视频| 亚洲一区二区自拍| 18videosex性欧美麻豆| 国产成人精品www牛牛影视| 视频一区中文字幕国产| 国产亚洲精品aa午夜观看| 麻豆传媒网站在线观看| 日韩精品成人| 欧美俄罗斯乱妇| 蜜桃91麻豆精品一二三区| 亚洲理论在线观看| 先锋资源在线视频| 亚洲视频精品| 国产精品传媒毛片三区| 精精国产xxxx视频在线播放| 亚洲精品网站在线播放gif| 超碰在线观看91| 欧美激情一区在线观看| 日韩成人精品视频在线观看| 欧美在线黄色| 精品国产_亚洲人成在线| 偷拍精品精品一区二区三区| 这里只有精品在线播放| 国产模特av私拍大尺度| 亚洲一区二区综合| av无码av天天av天天爽| 久久永久免费| 一区二区视频在线播放| 99亚洲乱人伦aⅴ精品| 日本人成精品视频在线| 精品国产丝袜高跟鞋| 精品久久久久久久人人人人传媒| 午夜影院在线看| 97视频热人人精品免费| 国产最新精品| 麻豆精品视频在线| 国产精品538一区二区在线| 国产乱子伦视频一区二区三区 | 97超碰在线播放| 亚洲自拍欧美色图| 国产又爽又黄ai换脸| 毛片基地在线观看| 久久精品夜色噜噜亚洲aⅴ| 日韩精品免费播放| 99国产一区| 中文字幕一区二区三区四区五区六区 | 性直播体位视频在线观看| 日韩av在线高清| 国产成人精品亚洲精品色欲| 午夜精品福利一区二区蜜股av | jizz一区二区| mm1313亚洲国产精品无码试看| 久久91精品| 国产精品观看在线亚洲人成网| 图片区小说区亚洲| 亚洲人成免费电影| 亚洲乱码在线观看| 7777精品伊人久久久大香线蕉完整版| 国产精品成人国产乱| 国产精品第13页| 90岁老太婆乱淫| 成人一二三区视频| 色欲欲www成人网站| 毛片不卡一区二区| 亚洲免费av一区二区三区| 国产欧美日韩一级| 久久在线中文字幕| 综合久久亚洲| 婷婷精品国产一区二区三区日韩| 超碰97在线免费观看| 亚洲字幕久久| 99视频在线播放| 开心久久婷婷综合中文字幕| 国产999在线观看| 中文字幕日韩三级片| 婷婷精品视频| 精品1区2区| 国产成人在线中文字幕| 国产成人精品国内自产拍免费看| 动漫一区二区| 伦理中文字幕亚洲| 伊人电影在线观看| 欧美精品生活片| 日本资源在线| 欧美巨大黑人极品精男| 成a人片在线观看www视频| 中文字幕亚洲激情| eeuss影院www在线播放| 日韩在线视频网站| 日本暖暖在线视频| 日韩中文字幕亚洲| 成视频免费观看在线看| 欧美成人精品一区二区| 欧洲成人综合网| 午夜精品久久久久久久白皮肤| 欧美激情网站| 国产成人一区二区在线| 日韩高清不卡| 91香蕉亚洲精品| 免费一区二区三区在线视频| 国产精品久久久久久久久久久久冷 | 国产精品久久夜| 大地资源高清在线视频观看| 亚洲九九爱视频| 国产午夜福利精品| 天天综合天天做天天综合| 久久久久女人精品毛片九一| 色婷婷综合视频在线观看| 国产精品综合在线| 亚洲精品在线免费播放| 日本免费不卡| 在线午夜精品自拍| 成人ww免费完整版在线观看| 高清在线视频日韩欧美| 亚洲欧美一区二区三区| 成人www视频在线观看| 欧美高清一级片| 农村寡妇一区二区三区| 日韩一区欧美| 国产精品av免费观看| 天堂8中文在线| 日韩激情av在线免费观看| 三级做a全过程在线观看| 色777狠狠综合秋免鲁丝| 51xtv成人影院| 日本国产精品视频| 成人噜噜噜噜| 久久精品一区二区三区不卡免费视频| 精品国产一区二区三区噜噜噜| 91社在线播放| 美女91精品| 午夜av中文字幕| 不卡视频一二三四| 天天做夜夜爱爱爱| 欧美日韩亚洲网| 亚洲永久精品视频| 亚洲福利在线视频| 老司机免费在线视频| 69av在线视频| 久久久久毛片免费观看| 欧美精品尤物在线| 欧美成人有码| 国产极品美女高潮无套久久久| 国产伦理精品不卡| 国产高清一区二区三区四区| 亚洲国产精品一区二区久久恐怖片| 精品视频一二三区| 欧美精品一区二区三区视频| 在线播放毛片| 国产不卡一区二区在线播放| 超碰成人在线观看| 日本黄色播放器| 媚黑女一区二区| 中文字幕人妻一区| 亚洲视频网在线直播| aaa在线视频| 欧美色国产精品| www.97av.com| 久久精品一本久久99精品| 外国成人直播| 国产在线一区二区三区欧美| 欧美一级精品| 男人的天堂99| 成人小视频免费在线观看| 四虎影视一区二区| 精品久久久免费| 国产日本精品视频| 精品国产一区二区三区久久| 日韩免费福利视频| 久久国产一区| 亚洲毛片av| 色婷婷精品久久二区二区密| 亚洲人被黑人高潮完整版| 夜夜躁很很躁日日躁麻豆| 伊人久久久久久久久久久久久 | 国产成人一区二区三区影院| 精品国产一区二区三区无码| 精品无人码麻豆乱码1区2区 | 国产精品久久久久久久岛一牛影视 | 亚洲图片小说视频| 一区二区三区精品99久久 | 日韩国产一级片| 国产成人免费网站| 久久黄色免费网站| 日韩一区二区三区在线| av片在线观看| 亚洲伊人久久大香线蕉av| 亚洲最新av| 亚洲高清av一区二区三区| 亚洲精品大片www| 超碰在线观看av| 久久久久久国产| 精品久久ai| 国产精品丝袜久久久久久消防器材| 成人ar影院免费观看视频| 日韩免费黄色片| 日韩国产一区三区| 午夜欧美激情| 欧美一区二区三区在线免费观看| 丝袜美腿成人在线| 久久免费手机视频| 欧美一区二区人人喊爽| 欧美一区二区三区| 成人黄色免费片| 欧美精品自拍| 久久亚洲AV成人无码国产野外| 欧美午夜精品在线| 国产69精品久久app免费版| 欧美视频亚洲图片| 97人人爽人人澡人人精品| 国产精品第一页在线| 教室别恋欧美无删减版| 我要看一级黄色大片| 亚洲日本青草视频在线怡红院 | 日本网站在线播放| 亚洲免费视频观看| 午夜不卡一区| 日本中文字幕网址| 国产精品久久久久久久久图文区| 国产手机av在线| 欧洲精品毛片网站| 亚洲激情中文在线| 亚洲专区区免费| 日韩亚洲欧美高清| 美女福利一区二区三区| 妞干网这里只有精品| av一区二区三区黑人| 中文字幕一区二区三区四区免费看 | 国产精品国产一区| 国产又黄又粗又猛又爽的视频| 欧美色手机在线观看|