聲明:下載反編譯軟件(這裏主要使用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這個東西就是一個標籤,類似額外的一個分類標記。當然這個標記是可以被使用的,但是得額外得代碼 去爲它添加功能。如果沒有代碼去實現,標記本身是沒有任何功能得。