便利な開発ツール:レイアウトを最適化する 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
注意点
コマンドを実行しても、リソースファイルが自動で変換されることはありません。あくまでも診断ツールです。
まとめ
Androidアプリ開発者として、レイアウトの複雑化に伴うパフォーマンスの低下には関心を持たざるを得ないので試してみましたが、特に複雑なレイアウトを持つアプリケーションに対して使ってみる価値があると感じました。
また、実行結果の例では、レイアウトのタグが置き換えられていたり、使われていないレイアウトが指摘されていることは容易に想像できたのですが、何気にネストできるレイアウトのレベルは10までであったり、レイアウトが保持できるビューの数が80までであることが記載されていたりして、良い勉強になりました。
文責:技術部 瀬戸 直喜(前・日本Androidの会四国支部長/情報セキュリティスペシャリスト)