以下の翻訳
Analyze Your Build with APK Analyzer
概要
Android Studioは、ビルドプロセスの完了後のAPKの構成を即座に洞察するAPKアナライザーを含んでいます。 APKアナライザーを使用することで、DEXファイルに関する問題のデバッグに費やす時間やAPKサイズの削減だけでなく、アプリのリソースを削減することが可能です。 Android StudioのAPKアナライザーで、以下の事項が遂行できます:
- APK中のファイルの絶対&相対サイズを確認することができます(DEXとAndroidリソースファイル等)
- DEXファイルの構成の理解
- APK中のファイルの最終バージョンを即座に確認(AndroidManifest.xml等)
- 2つのAPKを並べて比較する
プロジェクトを開いた時にAPKアナライザーにアクセスする方法が3通りあります:
- Android Studioのエディターウィンドウ中にAPKをドラッグする
- プロジェクトウィンドウのプロジェクトパースペクティブに切り替え、build/output/apks/ ディレクトリのデフォルトのAPKをダブルクリックする
- メニューバーのBuild > Analyze APKを選択し、APKを選択する
重要:デバッグビルドで解析する時、Build > Build APKを選択、または、gradleコマンドによって作成したAPKを使用します。 ツールバーの実行をクリックすると、即時実行が有効なAPKとなり、これは最適化のためのAPKアナライザーには使用できませんーこれらは開発専用で使用し、大半のリソースは動的に読み込まれます。 即時実行のAPKは、APKに埋め込まれたinstrant-run.zipファイルによって特定可能です。
ファイルとサイズの情報の閲覧
APKはZIPファイルフォーマットに従ったファイルです。APKアナライザーは、フォルダーの中にナビゲート可能な拡張機能の要素としてそれぞれのファイルやフォルダーを表示します。要素の階層構造は、APKファイル中のファイルとフォルダの構造を反映します。
APKアナライザーは、図1のように、それぞれの要素ごとに元々のファイルのサイズ(Raw File Size)とダウンロードファイルサイズ(Download Size)の値を表示します。 元々のファイルサイズはディスクに解凍した要素のサイズを表すのに対して、ダウンロードサイズは、Google Playで配布される場合の要素の推定圧縮サイズを表します。 ダウンロードサイズの合計の%(% of Total Download size)は、APKの合計ダウンロードサイズの割合を表します。
AndroidManifest.xmlの閲覧
あなたのプロジェクトが複数のAndroidManifest.xmlファイルを含んでいる場合(プロダクトフレーバー等)、または、マニフェストファイルを提供するライブラリを含んでいる場合、APKには一つのファイルにマージされます。 このマニフェストファイルは通常、APKのバイナリファイルですが、APKアナライザーで選択された時にこの要素のXMLフォームを再構築し表示します。 このビューワーによって、ビルドの間にアプリに適用された変更を理解することが可能となるでしょう。例えば、アプリケーションが依存するライブラリからのAndroidManifest.xmlファイルがどのようになっているか、最終的なAndroidManifest.xmlファイルにマージされることを確認することができます。
加えて、このビューワーはいくつかのlintの能力を有しており、右上の角に警告またはエラーを表示します。 図5は選択したマニフェストファイルのエラーレポートを表しています。
コードとリソース要素の閲覧
いくつかのビルドタスクは、APKファイルの最終的な要素を変更します。例えば、Proguardの収縮ルールファイルは最終的なコードを変更することができ、画像リソースはプロダクトフレーバーのリソースによって上書きされるでしょう。APKアナライザーでファイルの最終バージョンを閲覧することは容易です:要素をクリックすると、ファイルの一覧のすぐ下にテキストと画像の要素のプレビューを含む、コンテキストに対応するファイルが表示されます。
APKアナライザはまた、いくつかのテキストやバイナリファイルも表示できます。例えば、resources.arsc要素ビューワーで、特定言語の文字列リソースの翻訳のような設定特有の値を確認できます。図3は、それぞれの文字列リソースの翻訳が確認できます。
DEXファイルの閲覧
APKアナライザーのDEXファイルビューワーで、アプリのDEXファイルの潜在的な情報に即座にアクセスできます。 クラス、パッケージ、参照と定義の合計がビューワーを通じて提供され、これらはマルチDEXを使用するかを決めたり、64KのDEX制限以下に依存を削除する方法をアシストします。
図4は64KのDEX制限に迫っている中規模サイズのアプリを示しています。 それぞれのパッケージ、クラス、メソッドを含んでいる数が、定義されたメソッド(Defined Method)と参照されているメソッド(Referenced Method)列に一覧表示されています。 参照されているメソッド列は、DEXファイルで参照されている全てのメソッドの数をカウントします。 一般にこれは、コードで定義されたメソッド、依存するライブラリ、コードが使用している標準のJavaとAndroidパッケージで定義されたメソッドを含んでいます-これらはそれぞれのDEXファイルで64kのメソッドに制限されるようにカウントされています。 定義されたメソッド列は、DEXファイルの一つに定義されたメソッドのみカウントしています。そのため、この数字は参照されたメソッドのサブセットになっています。 APK中の依存性をパッケージする時に依存性に定義されたメソッドは、両方のメソッドカウントに追加されることに注意してください。 また、縮小と/またはProguardの収縮は、ソースコードのコンパイル後にDEXファイルの中身を大幅に変更することにも注意してください。
APKファイルの比較
APKアナライザーは、2つの異なるAPKのファイルの要素サイズを比較することができます。これは以前のリリースと比べてサイズが増加しているかどうかを理解するのに役立ちます。
更新されたAPKの公開前に、公開予定バージョンのAPKをAPKアナライザーに読み込みます。APKアナライザーウィンドウの右上のCompare Withをクリックします。 選択ダイアログ中で公開した最新のAPKを見つけ、OKをクリックします。 図6と同様のダイアログが表示され、アップデートによってユーザにどのようなインパクトがあるかを比較することができます。
図6はとあるアプリのデバッグビルドとリリースビルドの差分です。種々のビルドオプションはこれらのビルドタイプの間で使用され、潜在的な要素が異なるように変更します。