Bescottee苦しいときは伸びてるとき、楽なときは伸びていないとき

19 Android Lint の利用方法

admin to KnowHow, development — Tags: , ,  

Android Lint

Android Lintの意訳です。完璧な自信はありませんので原文も一緒にご参照ください。

Android Lint

Android Lintは、ADT16(とSDK Tools 16)のための新しいツールです。これは、Androidプロジェクトのソースコードの潜在的な不具合を発見するためのものです。このツールは、Eclipseに統合されて利用されます。アーキテクチャは、意図的に IDE と依存関係を持っていません。そのため、継続的インテグレーションシステム(CI)のようなシステムと同様に他のIDEやビルドツールにも統合されることが望まれています。

以下に不具合の種類をいくつかの例を交えて紹介します。

  • 翻訳の失敗(と、利用されていない翻訳)
  • レイアウトパフォーマンスの問題(以前の layoutopt ツールで発見されていたものとそれより多くのもの)
  • 未使用のリソース
  • 矛盾する配列サイズ(配列がマルチ構成で定義されている場合)
  • アイコンに関する問題(densityの間違いやアイコンのコピーや間違ったサイズなど)
  • ユーザビリティに関する問題(テキストフィールドに入力種類が指定されていないのようなもの)
  • Manifestのエラーに関すること
  • その他、たくさんのこと

2011/11/24:いくつかの新しい lint ルールを追加

このドキュメントを参照してください。これには lint で現在チェックされるすべての項目が掲載されています。
Lint はまだ開発中のため、このリストは将来追加されていきます。加えて、将来カスタムなチェック項目を(できる限り簡単に)追加できるようなAPIを開発しています。

コマンドライン利用方法

lintというコマンドラインツールが SDK tools/ ディレクトリに提供されています。
もしSDK tools/ ディレクトリにパスが通っていれば “lint”を実行できます。
実行時にAndroidプロジェクトディレクトリを指定してください。任意のディレクトリが指定可能で、(Androidプロジェクトではない場合)再帰的に探索されますし、ディレクトリ内のすべてのプロジェクトがチェック対象になります。(さらにスペース区切りで複数のプロジェクトを指定することもできます)

$ lint /src/astrid/
Scanning GreenDroid-GoogleAPIs: ..
Scanning stream: ...
Scanning api: ...........................
Scanning GDCatalog: .......................
Scanning GreenDroid: ...........................................................
Scanning tests: ...
Scanning filters: ....
Scanning tests: .....
Scanning astrid: ....................................................................................................................................................
Scanning simple: .......
api/res/values-ca: Error: Locale ca is missing translations for: sync_SPr_bgwifi_key, sync_SPr_forget_key, sync_SPr_interval_values, sync_SPr_logged_in_prefix... (2 more) [MissingTranslation]
astrid/res/values-ca: Error: Locale ca is missing translations for: DLG_cancel, DLG_dismiss, DLG_ok, EPr_deactivated... (117 more) [MissingTranslation]
api/res/values-cs: Error: Locale cs is missing translations for: sync_SPr_bgwifi_key, sync_SPr_forget_key, sync_SPr_interval_values, sync_SPr_logged_in_prefix... (2 more) [MissingTranslation]
(many lines omitted)
43 errors, 466 warnings
チェックの無効化

エラーメッセージの後に、鍵括弧([や])でエラーの様々な種別を表す id が表示されます。
上記の “MissingTranslation” のようなものです。
指定したチェック項目やチェックのリストを –disable オプションを追加することによって無効化できます。
例えば以下のように。

Usability カテゴリーの Icons サブカテゴリーのように、上記の “Usability:Icons” の記載を行い、カテゴリーリストを作成できます。
デフォルトではいくつかのチェックが無効化されています。それらは、 –enable フラグを追加することによって有効化できます。
最終的に、–check フラグを利用して正確に確認できます。以下のようにコードベース内の特定の問題を見つけられます。

利用可能な id とカテゴリーは以下のように探せます。

$ lint --list
Valid issue categories:
Correctness
Security
Performance
Usability
Usability:Icons
Accessibility
Internationalization

Valid issue id's:
"ContentDescription": Ensures that image widgets provide a contentDescription
"DuplicateIds": Checks for duplicate ids within a single layout
"StateListReachable": Looks for unreachable states in a <selector>
"InefficientWeight": Looks for inefficient weight declarations in LinearLayouts
"ScrollViewSize": Checks that ScrollViews use wrap_content in scrolling dimension
"MergeRootFrame": Checks whether a root <FrameLayout> can be replaced with a <merge> tag
...

各項目の利用方法を取得できます。–show コマンドオプションに id やカテゴリーを指定してください。(引数を省略するとすべての説明が見れます)

$ lint --show MissingPrefix
MissingPrefix
-------------
Summary: Detect XML attributes not using the Android namespace

Priority: 8 / 10
Severity: Warning
Category: Correctness

Most Android views have attributes in the Android namespace. When
referencing these attributes you *must* include the namespace prefix,
or your attribute will be interpreted by aapt as just a custom
attribute.
HTML レポート

コマンドラインツールからHTMLレポートも作成できます。生の lint 出力よりもいくつかの以下の利点があります。

  • 各項目ごとにより詳細な説明が記載されます。それにハイパーリンクを用いて各項目の属性やより詳細情報を提供できます。
  • エラーが存在する実際のソースコードを掲載できます(エラーの周りの3行程度)
  • ソースファイルを結合するリンクを含められます。
  • アイコンエラー時に、比較できるようにそれぞれのアイコンをサポートされます。

HTMLレポートを作成するために、–html filename の引数を追加してください。

$ lint --html /tmp/report.html

By default, links to source files will just use local file:// path resources. You can remap the URLs to a different prefix with the –url option. For example:

デフォルトでは、ローカルファイルの file:// パスを利用してソースファイルをリンクします。–url オプションを利用して異なる接頭語を利用して URL にリンクできます。

$ lint --html /tmp/report.html --url /src/MyProj=http://buildserver/src/MyProj
その他のコマンドラインオプション

"lint --help"を実行すれば、詳細情報や利用可能なオプションが表示されます。

Eclipse での利用方法

Lint は ADT 16 に統合されています。これによって lint のコマンドラインバージョンの上記のような機能が提供されます。

  • 多数の警告の自動的修正。
  • Lint が様々な編集時に自動的に実行されます。
  • エラーの特定事例と同様にエラーを抑止する機能があります。
  • 厳格に項目を設定する機能があります。
  • lint view から問題のソースコードに直接ジャンプできます。
Lintの自動実行

Lint は以下の場合に自動的に実行されます。

  • APKを作成時。この場合、lint は致命的なエラーのみの調査を行う特別なモード(高速に実行するため)で実行されます。そして、もし致命的なエラーが有る場合はapk作成が中止されます。この機能は Lint オプションで停止できます。
  • レイアウトファイルや manifest ファイルのようなXMLファイルを編集や保存した場合。この場合、すべてのファイル内で調査が実施されて、調査結果がエディタのマーカーとして表示されます。
  • レイアウトエディタを利用する場合。UI操作を行うたびに、ファイル内調査(layouoptの様々なルールのような)がレイアウトファイルに実行されて、lint window(レイアウトエディタの上部の左コーナーに表示されるエラーやマーカーから開いたり)が表示されます。
Lint Window

プロジェクト上で Lint を実行するために、パッケージエクスプローラからプロジェクトを選択し、Lint ツールバーアクション(画像の左上)をクリックします。

代わりの方法として、プロジェクト右クリックからAndroid Toolsのサブメニューから”Run Lint”を実行。これにより、Lint Windows が開かれてエラーが追加されます。エラーを選択すると、詳細説明が右のテキストエリアに表示されます。

Lint View でエラーをダブルクリックするとソースファイルのエラーの箇所にジャンプします。それぞれの警告のアイコンは重要性を示しており、警告の修正方法(次のセクションで紹介)が小さな電球で表示されます。

Windows にはアクションバーがあり(上部の右側の端の角)、以下のことをしてくれます。

  • lintを再実行して、結果を更新できます。(更新中の間、ストップボタンで中止もできます)
  • もし修正を無視したければ、エラーを修正済みにできます。
  • 警告のマーカーを削除します。
  • すべての警告マーカーを削除します。

クイック修正

多数の lint 警告は自動修正機能を持っています。たとえば、様々な layoutopt 修正項目は修正候補を出してくれます(例:wap_contentを 0dp に置き換える)

  • lint view から、電球をクリックして修正する
  • レイアウトエディタの警告から、Fixボタンを押して修正する
  • XMLソースエディタから、Quick Fix(Ctrl-1 or Command-1)を実行したり、警告に関連づけられている修正を選択する。
エラーの抑止

エディタの Quick Fix メニューから以下の選択ができます。

  • このファイル内のみ無視する
  • このプロジェクト内で無視する
  • ある期間、警告を無視する

(もし quickfix 上の lint 修正アクションが見つからなければ、既知の不具合を見てください。)

これらの選択肢は、プロジェクトの lint.xml に保存されており、コマンドラインツールによって見ることができます。
このように、UI上から警告を無視することができ、ソースプロジェクトのlint.xml ファイルを確認し、lint実行時の他の項目も無視設定したものは、表示されなくなります。(たぶん、手動で検証したみた結果)

オプション

すべてのプロジェクトで利用されるオプションのlint 全体オプションを編集するには、通常のEclipse オプションのndroid > Lint Options を選択してください。

すべてのプロジェクトで利用されるオプションのlint 全体オプションを編集するには、通常のEclipse オプションのndroid > Lint Options を選択してください。

オプションの項目を選択した場合、右下のドロップダウンから Severity(厳密性)(訳者注釈:errorにするかwarningにするか)を設定できます。これによって正確に項目をエラーにするかどうかを設定できます。(例えば、ダイアログのトップ近くにあるAPK作成時に中止する。など)

項目のチェックをオフにする場合は、severityで“Ignore”を選択してください。

lint 設定をプロジェクト毎に編集しないように注意してください。プロジェクト設定ダイアログを開いて(プロジェクト上で右クリック)、Android Lint の設定ページを探してください。オプションダイアログで手動でSeverityを設定するとエラーを抑止すると共に lint.xml ファイルに記録されます。それから、チーム内の他の項目は、プロジェクト内で設定した同じものを利用できます。

インストール方法

いまわかっていることだけでいうと、ADT16に早くアクセスできるように計画しています。(訳者注:すでにADT16.0.1がリリースされています。)

ソースコードが待ちきれないときは、git ソースコードリポジトリが sdk/lint フォルダーで利用できます。(手順は、
http://source.android.com/source/downloading.html をみてください。そして、マスターリポジトリからソースコードを取得してください。

既知の不具合
  • この項目(21124)はADT16で修正済み。
  • 未使用のリソース:未使用のリソースの発見は、いくつかのリソースで利用されている場合に正しく動作しない場合があります。lintがコマンドラインから実行されたとき、リソース参照を探すため内に簡単な文字列分析を利用します。コメントや文字列リテラルなどを無視する間に、まだ切り替えが遅れるかもしれないためです。lintがeclipseで動作しているとき、より正しい結果になるようにパースツリーを利用します。このプランは、lintコアがどのようなところで実行したとしても正しく動作するようなフルパースに統合するためです。
  • Overdraw 検出:検出を利用していないような場合に、javaコードを分析する必要があり、現在主要なJavaパースツリーは動作していません。(リソース検出を利用していない場合と違って、eclipse 内で実行することはできます)

Lint で解析対象になる項目

次のエントリの「Android Lint 解析内容の詳細を調査」で紹介しているので参考にしてください。

以上

19件のコメント »

  1. graceful_life より:

    頑張ってるよなぁ,誰なんだろう?

  2. patorash より:

    最近ちょくちょく見かけるので気になってた

  3. axcel_rss より:

    [hatena antenna] Android Lint の利用方法を記載 | Bescottee http://t.co/p5DxYIAH

  4. kawa_xxx より:

    新しい物が追加されたのか…

  5. kawa_xxx より:

    [android][tools]新しい物が追加されたのか… / “Android Lint の利用方法を記載 | Bescottee” http://t.co/8bNuKqRc

  6. zak_raw より:

    Android Lint の利用方法 http://t.co/vl39COZb

  7. dd0125 より:

    Lintの解説

  8. dd0125 より:

    Lintの解説 / “Android Lint の利用方法を記載 | Bescottee” http://t.co/Kc6jIAdY

  9. cota2n より:

    "Android Lint の利用方法を記載 | Bescottee" – http://t.co/l2TBYCGX

  10. sakaneya より:

    TLで流れてきた Android Lintの紹介記事 イイ(・∀・)ね、レポートはHTMLにするのが見やすい感じ http://t.co/Lgzu390W http://t.co/HWm2oNnE

  11. honjo2 より:

    TLで流れてきた Android Lintの紹介記事 イイ(・∀・)ね、レポートはHTMLにするのが見やすい感じ http://t.co/Lgzu390W http://t.co/HWm2oNnE

  12. yoktys より:

    Android Lint の利用方法 http://t.co/raS11UNE

  13. yuuto より:

    久しぶりにAndroidの環境構築したらAndroid Lintなるものが出てきた。どうやらAndroid版FireBugsのようなものっぽい。| Android Lint の利用方法を記載 | Bescottee – http://t.co/4HWCMjAI #FukInfra

  14. sakebook より:

    Android Lint の利用方法 http://t.co/2pEmZFTZ

  15. blacksheep より:

    [android] / “Android Lint の利用方法を記載 | Bescottee” http://andbrowser.com/develop...

  16. neiraza より:

    [android] / “Android Lint の利用方法を記載 | Bescottee” http://t.co/lkLnlIN0

  17. lint.xmlってなんだろう?、とぐぐってみた アプリの不具合を(ある程度)起動前検出するものらしい

  18. modal_soul より:

    “Android Lint の利用方法を記載 | Bescottee” http://t.co/dB0toLfT

  19. modal_soul より:

    Android LintのSecurityカテゴリのissueって、どの程度の範囲・精度ってどのくらいなんだろうか? http://t.co/jasecVu0

このコメント欄の RSS フィード トラックバック URL

コメントをどうぞ