便利な開発ツール:レイアウトを最適化する layoutopt (Android Developers - Dev Guide和訳)

原文はこちら

概要

layoutoptは、アプリケーションのレイアウトとレイアウトヒエラルキーを最適化するためのツールです。レイアウトファイルやリソースファイルを原因とする、アプリケーションのパフォーマンスに影響を及ぼす非効率な、あるいはその他のタイプの問題を素早くチェックすることができます。

ツールを実行するには、ターミナルを開いて SDKのtools/ディレクトリから layout <リソース名> を起動します。コマンド引数には、解析したい未コンパイルのリソースXMLファイルかディレクトリを指定します。

実行時にツールは指定のXMLファイルを読み込み、事前に定義されたルールセットに従ってレイアウトの構造を解析します。問題を発見した場合は、問題、ファイル名、行番号、問題の概要に関する情報と共に、推定される解決方法のいくつかを出力します。

使い方

lyaoutopt を実行するには、引数にレイアウトリソースのリスト(スペース区切りで複数可)を指定します:

layoutopt <XMLファイルのリスト または ディレクトリ>

例:

$ layoutopt res/layout-land
$ layoutopt res/layout/main.xml res/layout-land/main.xml
実行結果の例
$ layoutopt samples/
samples/compound.xml
   7:23 The root-level <FrameLayout/> can be replaced with <merge/>
   11:21 This LinearLayout layout or its FrameLayout parent is useless
samples/simple.xml
   7:7 The root-level <FrameLayout/> can be replaced with <merge/>
samples/too_deep.xml
   -1:-1 This layout has too many nested layouts: 13 levels, it should have <= 10!
   20:81 This LinearLayout layout or its LinearLayout parent is useless
   24:79 This LinearLayout layout or its LinearLayout parent is useless
   28:77 This LinearLayout layout or its LinearLayout parent is useless
   32:75 This LinearLayout layout or its LinearLayout parent is useless
   36:73 This LinearLayout layout or its LinearLayout parent is useless
   40:71 This LinearLayout layout or its LinearLayout parent is useless
   44:69 This LinearLayout layout or its LinearLayout parent is useless
   48:67 This LinearLayout layout or its LinearLayout parent is useless
   52:65 This LinearLayout layout or its LinearLayout parent is useless
   56:63 This LinearLayout layout or its LinearLayout parent is useless
samples/too_many.xml
   7:413 The root-level <FrameLayout/> can be replaced with <merge/>
   -1:-1 This layout has too many views: 81 views, it should have <= 80!
samples/useless.xml
   7:19 The root-level <FrameLayout/> can be replaced with <merge/>
   11:17 This LinearLayout layout or its FrameLayout parent is useless
実行結果の読み方

実行結果は下記の順で出力されています。

  • 解析対象のXMLファイル名
  • 開始行番号:終了行番号
  • 問題の内容 または 最適化された内容
  • 解決のためのヒント

注意点

コマンドを実行しても、リソースファイルが自動で変換されることはありません。あくまでも診断ツールです。

対応バージョン

SDK Tools Rev3(Android 1.5)以降

まとめ

Androidアプリ開発者として、レイアウトの複雑化に伴うパフォーマンスの低下には関心を持たざるを得ないので試してみましたが、特に複雑なレイアウトを持つアプリケーションに対して使ってみる価値があると感じました。
また、実行結果の例では、レイアウトのタグが置き換えられていたり、使われていないレイアウトが指摘されていることは容易に想像できたのですが、何気にネストできるレイアウトのレベルは10までであったり、レイアウトが保持できるビューの数が80までであることが記載されていたりして、良い勉強になりました。

文責:技術部 瀬戸 直喜(前・日本Androidの会四国支部長/情報セキュリティスペシャリスト)