1. 程式人生 > >安卓程式碼生成器的使用

安卓程式碼生成器的使用

總體介紹:https://my.oschina.net/zhengxiaohui/blog?catalog=5601579&temp=1487294342928

QQ交流群:158257599  


這裡介紹三劍客的最後一位:程式碼生成器

這是我用java swing寫的小工具,配合日常開發非常高效,能省很多時間。之前自己使用,所以沒有版本號。為了以後持續更新不至於混亂,我這裡新增上版本號吧。之前也存在幾個版本,並且有舊版本在我的csdn資源上,我也不知道怎麼修改上面的資源。本來還想用微雲分享,但是好像有時間限制,所以暫時還是先上傳到csdn吧,如果有誰知道放哪個渠道做資源下載更好的可以告訴我。我現在介紹的是最新的版本1.5的。

先看看介面:

java swing做的介面比較粗陋,但是這個工具只考慮功能,不考慮美觀哦。

目前總共有四個功能,下面逐一介紹。

1.Json轉Pojo

也就是Json轉Java Bean了,比較常用的一種功能。網路上也有很多類似的工具,但是我用到的一些工具或者外掛多少存在一些問題或者不能滿足我自己的要求。比如有一些冗餘的程式碼或者不需要的註釋,有的存在一些bug更新又比較慢,還有的沒有實現我需要的內部類巢狀的功能還需要手動合併程式碼。基於以上一些原因,我決定乾脆自己寫一個,所以就有了這個功能。

下面來演示一下:

隨便找一段json程式碼,放到輸入框中,寫入類名,比如GlossBean,點選生成就能生成對應的Pojo程式碼了。

不管是陣列結構或者多層巢狀結構都能正確生成,是不是很爽,再也不用手動敲這些程式碼了。少了多少重複勞動,節省了多少寶貴時間,關鍵還不會出錯(人工敲程式碼是有可能敲錯的,而且有時候排查bug很可能會忽略這些小細節,結果導致浪費了大量時間才發現原來tmd是這個小問題導致的,那種心如死灰的感覺我相信很多老鳥都經歷過吧)。想想別人還在加班,而我們早早的就完成了任務,早早的下班回家陪老婆孩子。(當然前提是你有,嘎嘎嘎!)這時候你就會又想起一首歌了:“無敵是多麼的寂寞。。。”好了,說了這麼多,其實這只是第一個功能,後面還有三個呢。是不是想想都開心(會有什麼強大的功能呢?),那麼繼續往下說。

2.佈局XML轉findView

這個功能也是經常會用到的,相信不少開發安卓的人寫findViewById已經寫的非常厭煩了吧。沒有錯,這個功能主要針對這個問題寫的,但是不僅僅是為了解決這個問題哦。你可能會說xutils或者ButterKnife已經搞定了這個問題啊。對啊,是搞定了,但是你有沒有發現一些問題呢?那麼我來說說吧。

首先,這種採用註解的方式注入的程式碼,我個人覺得可讀性不是很好,而且程式碼塊的高度被拉長了,特別是控制元件非常多的時候。一開啟程式碼,一開始都是長長的這個:

這樣導致主程式碼的結構跑到非常下面去了,不利於一眼瞭解整體結構。當然這只是其中的一個小問題,可以忽視。

第二個問題就是版本不相容,好像新舊ButterKnife的寫法不一樣吧。這樣就導致如果舊專案使用的是舊版本的ButterKnife,那麼維護的時候也要找到舊版本的ButterKnife進行安裝,不然沒法適配。而且對新人維護舊專案來說可讀性也不好。xutils不是非常瞭解版本間有沒有區別。

第三個問題還是可讀性和可維護性。主要是可維護性。一個公司裡,如果舊的專案用這個,新的專案不用,或者反過來舊的專案不用,新的專案用。還有一種情況是不同的專案組有的用,有的不用。那麼交叉維護的時候程式碼很難融合,複製過來後又需要修改,這就很蛋疼了。所以我一貫堅持使用原生的程式碼進行編寫,而且我在z框架中統一了Activity,Fragment,Adapter的findView寫法,可讀性和可維護性都非常好,而且非常方便查詢,複製等操作。

既然優缺點對比這麼明顯,那麼我們來實際體驗一下吧:

首先看看介面

只要在輸入框中輸入xml佈局中複製過來的程式碼(程式碼必須使用快捷鍵格式化,保證id屬性是第一個屬性)點選生成就可以了,就是這麼簡單,就是這麼奈斯。其中最上輸入框的view字串是可以編輯的,比如改成contentView等(在z框架中預設就好啦)。看看底下輸出框生成的東西吧。

都是原生的程式碼,結構非常整齊,可讀性相當好,可維護性當然也好啦。這裡說明一下為什麼生成的控制元件名稱不是按照java通常的命名規範定義的,比如imageView或者mImageView等,而是跟xml佈局中id的名稱一樣的。原因是這樣寫更容易區分控制元件和普通變數,而且快捷查詢的時候更方便,不管是宣告處,findview處或者是onclick的地方都能用一個名稱查詢到。所以規則是死的,人的思想是活的,在特定的情況下要綜合考慮並作出取捨。好了,那麼生成了哪些程式碼呢?如下:

控制元件的宣告

控制元件的查詢

控制元件的事件註冊

控制元件的事件響應

沒錯,比其它工具更牛逼的地方是多生成了控制元件的事件註冊和響應程式碼。你看,又省了一些力氣和時間。當然有些事件不需要的可以手動刪掉程式碼。z框架的Activity,Fragment,Adapter的初始化方法中都定義了引數view,以及實現了OnClickListener介面,所以這三種類都可以使用這個工具生成的格式相同的程式碼而不用區分,以後維護和複製也更加方便。是不是很爽?無敵是多麼的寂寞。。。那麼看看第三個功能吧。

3.格式化字串

這個功能雖小,用處卻也大。輸入一個單詞,比如user,看一下生成了什麼:

生成了這個單詞的首字母大寫,Activity,Fragment,Adapter字尾的類名以及activity,fragment,adapter字首的佈局名稱,還有全大寫字母的單詞以及常用的常量宣告。看吧,這些都是我們日常開發中常用的命名。這裡輸入一個模組名,就能得到各種各樣的常用名稱了。這時候你只要複製這些單詞去建立檔案就可以了,又省了不少事。所以你們發現沒有,我制定的命名規範裡面有些定義是跟這個程式碼生成器相配合的。

這時候你可能已經發現中間那個user沒有變化,為什麼呢?因為它有另外的作用,那就是第二個子功能了。想想平常我們在string.xml中定義字串的流程,首先value值就是我們要引用的字串,比如:“請輸入正確的密碼!”,然後再給它定義一個key值,這時候key可以自由指定,只要符合它的規範就可以了。很多人的通常做法是根據中文的字面意思一個個翻譯成英文單詞再用"_"下劃線拼接起來,像我這種懶人當然有更方便的方法啦。那就是使用有道直接翻譯:

你可能會說:“翻譯後的語句還是不符合string.xml的key值規範啊”。沒錯,這時候就要用到工具了,把有道翻譯的結果語句複製到工具的輸入框中,點選生成,如下圖:

看到沒有?中間這個字串就是根據有道翻譯出來的語句生成的。以後你們不用再自己痛苦地一個個翻譯單詞並拼接了,特別是一些複雜的詞語或者比較長的語句,直接交給有道翻譯再用工具生成key值複製到string.xml中就可以了。是不是很神奇,很方便。如果你以為這個工具只是方便到這種程度,那你就too young too simple了。還有一個更強大的功能等著你呢,那就是接下來介紹的第四個功能了。第四個功能可以說是剛才介紹的這個功能的加強版。什麼?還有加強版?不會還有豪華版,白金版吧。我可以明確的告訴你:“暫時沒有!”。好吧,往下看。

4.中文翻譯成string.xml的字串

看到標題應該大概知道是什麼功能了吧。沒有錯,還是關於字串翻譯的。我隨便寫幾個詞語,看看效果吧:

我輸入了三個句子,並用回車換行:

你好嗎?
我很好!
很高興見到你。

點選生成按鈕後自動生成了:

看到了沒?工具不緊自己分割了語句還自動翻譯了語句,並且自動拼接好了符合string.xml格式的程式碼塊,不需要使用有道翻譯再手動複製了,而且能一次性批量生成多條,是不是非常的強大?這種方便程度的程式碼編寫是不是你以前想都沒有想到過的?可謂是聞所未聞,見所未見吧,無敵是多麼的寂寞。。。

好了,不唱了,那麼來總結一下吧。以上每個功能看起來好像也不是很複雜,真的能提高很多效率嗎?答案是肯定的,不信你就試試看啊,對吧。不要寄希望於只需要一種框架或者一種工具的單個功能就能實現百分之幾十的效率提高,那基本是不可能的。量變才能引起質變,不積跬步無以至千里,道理是一樣的,其實每個小功能都是在一點點的提高效率,最後合起來的總量是超出你想象的。這些工具都是針對日常開發中最常用的地方,最多重複的地方,也是量最大的地方,所以整個專案的開發過程用下來後,效率提高絕對是驚人的,而且還兼顧了穩定,不容易出問題,良好的可讀性,可維護性等優點,是不是好處多多?

到這裡我們的三劍客都介紹完了,三者可以說是配合得天衣無縫,天下無敵。當你們把z框架,程式碼模板,程式碼生成器三者聯合起來用的時候就會感嘆:“原來安卓開發可以這麼簡單輕鬆啊!”