AndroidStudio三種自動寫代碼技術簡介

聲明:下載反編譯軟件(這裏主要使用jd-gui.exe打開對應的jar即可),不必深入使用,對反編譯有興趣的可以深入研究。

         附:反編譯軟件目錄(加固軟件需要脫殼):

                                              apktool(解壓apk)、

                                              dex2jar(將解壓的dex.classes轉化爲jar)、

                                              jd-gui(打開對應的jar)、

                                              jeb(暫未使用)、

                                              IDA(反編譯.so文件)。

1、通過plugin寫代碼:eg:butterKnife-Zelezny、GsonFormat等。

查看方式:通過反編譯軟件jd-gui打開jar包(路徑eg:C:\Users\Administrator\.AndroidStudio3.3\config\plugins\android-butterknife-zelezny.jar)。

原理:主要是通過javaPlugin技術實現項目編寫代碼自動化書寫(也就是在已完成代碼的前提下,再書寫某些重複性或者說類似的代碼時通過插件一鍵生成。):

           AnAction的子類爲主程序入口,同時需要在plugin.xml中聲明;

           然後通過書寫一套類似的Android界面化API生成的界面來確定用戶需求,然後根據不同的選擇按既定的規則生成目標的代碼。

優點:沒有侵入性;

缺點:靈活性不夠(但是因爲其是爲特定代碼而設計,扯不上什麼靈活性,也只是相對模板來說靈活性不夠);                                     需要學習和熟悉新的API。

 

2、通過模板生成代碼(這是AndroidStudio自身生成代碼的方式)。

       查看方式(均爲AndroidStudio自動菜單的模板):C:\Program Files\Android\Android Studio\plugins\android\lib\templates;

       優點:參考這種方式,可以快速的生成自己所需要的業務代碼模板(在對應目錄下,參考EmptyActivity,BlankActivity等包可以快速生成自己的業務代碼模板,另外可以參考MVPArmsTemplate的實現方式);看過模板就會自己寫,不需要額外學習即可書寫,足夠靈活方便快捷。

       缺點:但是每次AndroidStudio更新都可能被AndroidStudio刪除掉。需要手動保存。

 

3、通過apt(Annotation Processing Tool)技術eg:butterKnife、dragger等

     查看方式(需要先在項目裏添加依賴編譯,butterKnife爲例):C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.jakewharton\butterknife-compiler\10.1.0\4963d03eb222d3352fe1f17b2625ae4f1b6ac7fb\butterknife-compiler-10.1.0.jar

     實現原理:主入口AbstractProcess子類,通過編譯時將帶有特定聲明的Annotation(eg:@BindView)編譯到build文件中(目錄:app\build\generated\source\apt查看,類似反射實現),生成對應的可運行的XXActivity_ViewBinding文件(核心JavaFile類),在通過ButterKnife.bind(this)實現對應資源的綁定。這一切實現是無知覺的唯一需要手動聲明註解、綁定時機等(ButterKnife可以通過plugin一鍵生成,dragger好像沒有)。

     優點:實現解耦。

     缺點:需要學習新的API(API與反射有諸多相似)。

    題外話:Annotation這個東西就是一個標籤,類似額外的一個分類標記。當然這個標記是可以被使用的,但是得額外得代碼                        去爲它添加功能。如果沒有代碼去實現,標記本身是沒有任何功能得。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章