android代碼審查工具---lint工具的使用
轉載請著名出處:http://blog.csdn.net/lijunhuayc
搞了這麼久android我居然不知道lint工具是幹啥的,雖然每次在eclipse下右鍵項目android tools下面都能看到它,我卻木有去瞧瞧她能幹嘛~作為一枚android搬磚人,我感到羞愧啊~~~~~
好吧,既然沒用過,那幾天看到這玩意兒,知道她能幹啥了,那麼就來現場調戲她一番再說~
你想調戲她嗎?跟著我來吧,絕對新手層級現場表演~
先來看看Google是如何說的:
The Android lint tool is a static code analysis tool that checks your Android project source files for potential bugs and optimization improvements for correctness, security, performance, usability, accessibility, and internationalization.
In Android Studio, the configured lint and other IDE inspections run automatically whenever you compile your program. You can also manually run inspections in Android Studio by selecting Analyze > Inspect Code from the application or right-click menu. The Specify Inspections Scope dialog appears so you can specify the desired inspection profile and scope.
大體意思就是lint工具可以從各個方面checks你的項目潛在的bug等等。在你編譯啟動並執行時候它會自動運行。你也可以手動剖析器。(一下就暴露了我是英語渣渣~~~以後不能裝逼了~~)
具體詳細的可以看這裡:http://developer.android.com/tools/help/lint.html
eclipse中運行lint有兩種方式,項目左上方工具列裡面有個 帶勾勾 的工具可以單個或者批量檢查項目,其次是右鍵項目android tools裡面 Run lint ....
好吧,拿個項目跑一下試試:
我勒個去,不查不知道一check嚇一大跳。這麼多嗎蛋的問題。不說了,哭一會去了~~~
好吧,接下來一個一個的看看是不是都是有問題的,雙擊可以跳轉到對應位置去。
1、第一個紅色錯誤:是layout布局裡面用@+id 定義了多個相同的id,之所以錯誤是因為這個layout對應的介面只顯示介面,暫時沒有使用資料,布局檔案有雷同的地方,存在複製粘貼的操作導致的,這裡修改一下id就可以了
<喎?http://www.bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+MqGitdq2/rj2uuzJq7TtzvOjuszhyr7Qxc+iIKGwIENsYXNzIHJlZmVyZW5jZWQgaW4gdGhlIG1hbmlmZXN0LCBjb20uZ29sZHRlbC5laW0uYWN0aXZpdHkuQ2hhdE5vdGljZUFjdGl2aXR5LCB3YXMgbm90IGZvdW5kIGluIHRoZSA8YnI+CiBwcm9qZWN0IG9yIHRoZSBsaWJyYXJpZXMgobGho9StwLTKx21hbmlmZXN0wO/D5teisuG1xGFjdGl2aXR5w7vV0rW9o6y87LLpt6LP1srHtMthY3Rpdml0edLRvq2yu7Tm1NrBy6Gjc2/S1Lrz16LS4qOsyb6z/bK708O1xGFjdGl2aXR5vMe1w8ihz/ttYW5pZmVzdNbQtcTXorLhoaM8L3A+CjxwPjxicj4KPC9wPgo8cD4zoaK12sj9uPa67MmrtO3O86O6PC9wPgo8cD7M4cq+o7qhsCAgUGxhY2luZyBhIDxXZWJWaWV3PiBpbiBhIHBhcmVudCBlbGVtZW50IHRoYXQgdXNlcyBhIHdyYXBfY29udGVudCBsYXlvdXRfaGVpZ2h0IGNhbiBsZWFkIHRvIHN1YnRsZSA8YnI+CiBidWdzOyB1c2UgbWF0Y2hfcGFyZW50IGluc3RlYWQgIKGxIHdlYnZpZXe1xHBhcmVudCBlbGVtZW50yrnTw8HLd3JhcF9jb250ZW501/fOqmhlaWdodMr00NS/ycTc0v3G8M6iw+61xEJVR6OsvajS6cq508NtYXRjaF9wYXJlbnS0+szmoaM8L3A+CjxwPjxicj4KPC9wPgo8cD54bWy0+sLryOfPwqO6PHByZSBjbGFzcz0="brush:java;">
修改webview父標籤的屬性為match_parent,但我們發現webview的父標籤是ScrollView的一個子項目,Google推薦我們ScrollView的子項目應該使用warp_parent屬性,所以又會出現黃色的警告資訊,這裡無關緊要,不管。
依次看下面的黃色警示資訊,看看哪些是需要修改的~
1、The com.gl.listener.BaseListenerService is not registered in the manifest提示說這個service沒有在manifest註冊,查看這個服務是個基類服務,不需要註冊的。還有其他的service也是提示沒註冊的,其他的service是沒有使用到的廢棄的類,可以直接刪除了,醬紫就縮減了項目。
2、Expected duration Toast.LENGTH_SHORT or Toast.LENGTH_LONG, a custom duration value is not supported提示說Toast.makeText的duration參數推薦應該使用Toase.LENGTH_SHORT或者Toast.LENGTH_LONG之一,沒影響不用修改。
查看了大部分警告資訊,大都是無關緊要的提示,是google推薦我們的一些詳細的具體的規範,但有時候這些規範不利於我們編碼,so不一定要完全遵守,舉個例子:比如說使用ImageView控制項的時候會提示我們需要一個contentDescription屬性,但是我們完全可以不寫這個屬性。
3、The resource R.dimen.bottom_tab_padding_drawable appears to be unused提示說這個資源沒有被使用,意思就是說這些冗餘的資源檔中的資訊,我們不再使用過來,可以刪除了。其他還有很多這樣的資訊。依次排查。經過大量的篩查可以精簡專案檔。
看這裡有300多條沒使用的資源資訊,其中包括乳品,動畫xml,背景xml,字串資源,dimens資源等等,刪除可以減少安裝包大小。並且使項目結果較為清晰,不然有朝一日[N年後的今天],你再次維護此項目的時候會讓你頭疼到死,因為你無法知道當初留下這些沒有使用的資源的用意何在(當然,這一條同樣適用於代碼冗餘審查,留下不使用的代碼比資源更加難於維護)。
4、下面還有一條performance類型的警告資訊,這類型的警告資訊就是影響效能的警示資訊了,能處理的盡量處理掉,比如:This LinearLayout layout or its RelativeLayout parent is possibly useless。本項目裡面定位到layout檔案查看,發現是布局頂層使用了一個RelativeLayout,然後包著一個LinearLayout作為子布局,其他所有布局控制項均在這個LinearLayout內部,意思就是說這裡的布局層級冗餘了,頂層的相對布局和二層的線性布局有一個無濟於事,意思就是多了一層無用的布局,可以去除掉一層。我們這裡的處理是刪除最外層RL布局,這樣做的好處是LL內部的布局是依賴LL來布局的,如果刪除LL內部的布局務必需要調整為依賴RL,會大量修改,而刪除RL則不會影響到LL內部的控制項布局。一個字:方便!!!