Android 註解及apt使用

 

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/lib739449500/article/details/98482907

 

1.什麼是apt

  • 什麼是apt
    • APT,就是Annotation Processing Tool的簡稱,就是可以在代碼編譯期間對註解進行處理,並且生成Java文件,減少手動的代碼輸入。註解我們平時用到的比較多的可能會是運行時註解,比如大名鼎鼎的retrofit就是用運行時註解,通過動態代理來生成網絡請求。編譯時註解平時開發中可能會涉及的比較少,但並不是說不常用,比如我們經常用的輪子Dagger2, ButterKnife, EventBus3 都在用,所以要緊跟潮流來看看APT技術的來龍去脈。
  • 編譯時註解。
    • 也有人叫它代碼生成,其實他們還是有些區別的,在編譯時對註解做處理,通過註解,獲取必要信息,在項目中生成代碼,運行時調用,和直接運行手寫代碼沒有任何區別。而更準確的叫法:APT - Annotation Processing Tool
  • 大概原理
    • Java API 已經提供了掃描源碼並解析註解的框架,開發者可以通過繼承 AbstractProcessor 類來實現自己的註解解析邏輯。APT 的原理就是在註解了某些代碼元素(如字段、函數、類等)後,在編譯時編譯器會檢查 AbstractProcessor 的子類,並且自動調用其 process() 方法,然後將添加了指定註解的所有代碼元素作爲參數傳遞給該方法,開發者再根據註解元素在編譯期輸出對應的 Java 代碼

2.annotationProcessor和apt區別

  • annotationProcessor和apt區別
    • Android 官方的 annotationProcessor 同時支持 javac 和 jack 編譯方式,而 android-apt 只支持 javac 方式。當然,目前 android-apt 在 Android Gradle 插件 2.2 版本上面仍然可以正常運行,如果你沒有想支持 jack 編譯方式的話,可以繼續使用 android-apt。
    • 目前比如一些常用框架dagger2,butterKnife,ARouter等,都支持annotationProcessor
  • 什麼是jack編譯方式?
    • Jack (Java Android Compiler Kit)是新的Android 編譯工具,從Android 6.0 開始加入,替換原有的編譯工具,例如javac, ProGuard, jarjar和 dx。它主要負責將java代碼編譯成dex包,並支持代碼壓縮,混淆等。
  • Jack工具的主要優勢
    • 完全開放源碼,源碼均在AOSP中,合作伙伴可貢獻源碼
    • 加快編譯源碼,Jack 提供特殊的配置,減少編譯時間:pre-dexing, 增量編譯和Jack編譯服務器.
    • 支持代碼壓縮,混淆,重打包和multidex,不在使用額外單獨的包,例如ProGuard。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章