定製Android-Lint檢查問題的現有規則

來源:互聯網
上載者:User

田海立

2012-10-02

 

對Android-Lint發現的問題,我們需要進一步的處理:是確實存在的我們自己的設計問題,要解決它;對無關緊要或者是我們特別設計的問題,要在Android-Lint中忽略掉。要解決的問題需要具體問題具體分析,本文主要講解在Eclipse環境和命令列下,如何忽略掉Android-Lint中檢查出的問題,並在此基礎上,根據項目的需要定製Android-Lint檢查問題的規則。

Android-Lint相關的文章

  •  Android-Lint:查錯與代碼最佳化利器

Android-Lint的簡述:Lint檢查哪些問題;如何使用;有哪些選項;與其他系統整合。

  •  定製Android-Lint檢查問題的現有規則

對Android-Lint發現的問題進行處理。可定製項目中採用的規則。

  •  Android-Lint檢查問題列表

Android SDK Tools / ADT 20.0.3中所支援的預設檢查的所有問題。

有英文版本和中文版本。英文版本從Android-Lint中直接匯出;中文版本還不完整,對每一條的解釋會逐步完善。

 

當然,最關鍵最權威的還是應該看官方網站:http://tools.android.com/tips/lint

 

Android SDK內建的APIDemo用Android-Lint檢查一下,也還報了很多的問題。

 

一、忽略XML檔案中的問題

 

1.1 MissingPrefix問題

 

Layout的device_admin_sample.xml檔案中定義了下面的Button

    <Button        android:id="@+id/set_password"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android_layout_gravity="east|center_vertical"        android:text="@string/set_password">    </Button>

 

執行Android-Lint就會報MissingPrefix警告:

 

1.2 解決XML中的問題

 

可以在Lint Warnings View中解決(圖中表徵圖從左至右順序)

 

  Suppress this error with an annotation/attribute

點擊該表徵圖之後,直接更改了device_admin_sample.xml檔案:

    <Button        android:id="@+id/set_password"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android_layout_gravity="east|center_vertical"        android:text="@string/set_password"        tools:ignore="MissingPrefix" >    </Button>

XML檔案中直接增加了tools:ignore="MissingPrefix"。

 

  Ignore in this file

在本檔案中忽略,而在別的檔案中仍然出現。

 

  Ignore in this project

當前項目中都忽略該Issue。

執行之後,在本項目根目錄下建立了lint.xml的檔案,內容為:

<?xml version="1.0"encoding="UTF-8"?><lint>    <issue id="MissingPrefix"severity="ignore" /></lint>

 

  Always ignore

所有項目中都忽略。

 

[TIPS#1]   Ignore in this project和  Always ignore操作,同執行Lint Warnings View中的最後一個Icon --  Options…,然後配置某一個項目或者全域設定中該Issue的Severity為ignore。

[TIPS#2] Eclipse中的實現有BUG,有時設定了這些Ignore操作,即便立即執行檢查也不一定生效,需要重啟Eclipse。

 

二、解決Java代碼中的問題

 

2.1 NewAPI問題  

 

APIDemo中指明了支援最低API-1,但是代碼裡卻用了API-3的介面,執行Lint會報錯:

 

2.2 解決問題

 

把游標放在報錯代碼處,會自動提示如何快速fix。

1. 前面紅色圓角框內是用Javaannotation方式解決(API-16之後才有):@SuppressLint‘<IssueId>’或@TargetAPI(<api>)

@SuppressLint ‘<IssueId>’用來忽略<IssueId>。適用範圍在所調用的方法處或整個類中。

@TargetAPI(<api>)用來指示API用給定的<api>,而不是項目中指定的。適用範圍在所調用的方法處或整個類中。

2. 後麵粉紅色圓角框內同XML中解決方式——在本檔案/ 本項目/ 全域範圍內忽略檢查。

 

三、命令列下解決問題

 

從上面Eclipse環境下的解決問題的方式知道,可以指定檔案來定製Lint檢查Issue的處理方式。

下面是一個lint.xml的例子:


<?xml version="1.0" encoding="UTF-8"?><lint>    <!-- Disable the given check in thisproject -->    <issue id="IconMissingDensityFolder" severity="ignore" />     <!-- Ignore the ObsoleteLayoutParamissue in the given files -->    <issue id="ObsoleteLayoutParam">        <ignore path="res/layout/activation.xml" />        <ignore path="res/layout-xlarge/activation.xml" />    </issue>     <!-- Ignore the UselessLeaf issue inthe given file -->    <issue id="UselessLeaf">        <ignore path="res/layout/main.xml" />    </issue>     <!-- Change the severity of hardcodedstrings to "error" -->    <issue id="HardcodedText" severity="error" /></lint>

 

Lint.xml中關鍵是對issue(用id指定)的severity進行指定,並且可以指定該issue作用於指定的檔案還是當前項目。

 

把lint.xml放在項目的根目錄中,命令列執行lint時候,lint就會用lint.xml中的規則。

另外,執行lint時還可以用參數--config<fileName>指定一個全域的配置用於所有的項目。當項目中已有lint.xml,則對於某個issue而言,在lint.xml中沒有對該issue特別定製的情況下,--config指定的檔案<fileName>中的該issue的定製才起作用。

 

四、定製Lint檢查的規則

 

Android-Lint有預設的檢查和報錯的規則,但通過上面的分析知道,可以在Eclipse或者命令列下改變這種規則,從而可以定製Lint檢查的規則。

推薦定製的路線

  •  在Eclipse中基於現有的問題,逐個分析並解決,然後我們就能得到一個Eclipse自動產生的lint.xml這個定製檔案;
  •  然後這個lint.xml用於Eclipse和/或命令列下進行後續的檢查;
  •  後續發現的問題再進一步處理,逐步完善lint.xml這個定製檔案。

當然,如果有足夠的時間,完全也可以Review一遍Android-Lint已經支援的所有的Issue,對他們逐個進行定製。對這些Issue的 Review,也能加深我們對Android設計中問題解決和效能最佳化方法的理解。

 

注意:這裡教你如何忽略Lint發現的問題,但你千萬不要上來就忽略,關鍵還是要解決這些發現的問題。即便是要忽略,也要確保你已經明白他們的含義,以及自己在做的操作(有時候,隱患恰恰被你給忽略過去了)!

特別地,一旦項目組決定採用Android-Lint,定製Lint規則要有對項目和團隊負責的專人來定製執行。Lint的目的是盡量多的暴露問題,解決問題,而個人會有刻意隱藏/規避錯誤的傾向。所以,驗收的時候,用大家討論認可的Lint規則做統一的執行檢查。



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.