lightbulb_outline Help shape the future of the Google Play Console, Android Studio, and Firebase. Start survey

事前ビルドされた APK のプロファイルとデバッグ

Android Studio 3.0 では Android Studio プロジェクトから APK をビルドすることなく、APK のプロファイルとデバッグができます。 ただし、デバッグ可能なバージョンの APK を使用する必要があります。

APK のデバッグを開始するには、まず Android Studio のウェルカム画面で [Profile or debug APK] をクリックします。 既にプロジェクトを開いている場合は、メニューバーで [File] > [Profile or debug APK] をクリックしてください。 次のダイアログ ウィンドウで Android Studio にインポートしたい APK を選択して、[OK] をクリックします。 すると、図 1 のような画面が表示されます。

図1. 事前ビルドされた APK を Android Studio にインポート

注: APK を Android Studio にインポートすると、IDE によって自動的に新しいプロジェクトがホーム ディレクトリに作成され、ターゲット APK のローカルコピーが生成されます。 そのため、元の APK の再ビルドや更新を行った場合は、その更新後のバージョンを手動で Android Studio に再度インポートする必要があります。

[Project] ペインの [Android] ビューでは、次のような APK の中身を確認できます。

  • APK ファイル: APK をダブルクリックすると APK Analyzer が起動します。
  • manifests: APK から抽出したアプリのマニフェストです。
  • java: Android Studio によって APK の DEX ファイルから(.smali ファイルに)逆コンパイルされた Java コードが含まれます。 このディレクトリにある .smali ファイルは、それぞれ Java クラスに対応しています。

  • cpp: アプリにネイティブのコードが含まれている場合は、このディレクトリに APK のネイティブ ライブラリ(.so ファイル)があります。

  • External Libraries: Android SDK が含まれます。

Android Profiler を使用して、すぐにアプリの評価を始めることは可能ですが、現時点でこのプロファイラはアプリの Java プロセスにしか対応していません。 ブレークポイントを使ってアプリの Java およびネイティブのコードをデバッグするには、まず Java ソースをアタッチし、さらにネイティブのデバッグ シンボルをアタッチする必要があります。

Java ソースのアタッチ

Android Studio はデフォルトで APK から Java コードを抽出して、それらを .smali ファイルとして保存します。 ブレークポイントを使って Java コードをデバッグするには、デバッグしたい各 .smali ファイルに Java ソースをアタッチする必要があります。

Java ソースをアタッチする手順は次のとおりです。

  1. [Project] ペインで([Android] ビューを表示して).smali ファイルをダブルクリックします。 ファイルを開くと、図 1 のようにエディタに黄色い警告バナーが表示され、Java ソースを選択するよう促されます。
  2. エディタ ウィンドウ上部の [Attach Java Sources] をクリックします。

  3. アプリの Java ソースがあるディレクトリに移動して [Open] をクリックします。

[Project] ウィンドウでは、IDE によって .smali ファイルが対応する .java ファイルに置き換えられます。 これで通常どおりにブレークポイントを追加してアプリをデバッグできます。

ネイティブのデバッグ シンボルのアタッチ

APK 内のネイティブ ライブラリ(.so ファイル)にデバッグ シンボルが含まれていない場合は、図 1 のように IDE の [Messages] ウィンドウに警告が表示されます。 APK のネイティブ コードをデバッグしたり、ブレークポイントを使用したりするには、デバッグ可能なネイティブ ライブラリをアタッチする必要があります。 まだ NDK とツールをダウンロードしていない場合は、必ずダウンロードしてください。

デバッグ可能なネイティブ ライブラリをアタッチする手順は次のとおりです。

  1. [Project] ウィンドウの cpp ディレクトリ配下で、デバッグ シンボルを含まないネイティブ ライブラリ ファイルをダブルクリックします。 これにより、その APK でサポートされる ABI の一覧がエディタ ウィンドウに表示されます。

  2. エディタ ウィンドウの右上にある [Add] をクリックします。

  3. アタッチしたいデバッグ可能なネイティブ ライブラリがあるディレクトリに移動して、[OK] をクリックします。

  4. APK とデバッグ可能なネイティブ ライブラリが異なるワークステーションで作成されている場合は、次の手順でデバッグ シンボルのローカルパスを指定する必要があります。

    1. 図 2 に示すように、エディタ ウィンドウの [Path Mappings] セクションで [Local Paths] 列のフィールドを編集し、不足しているデバッグ シンボルへのローカル パスを追加します。すると IDE により、リモート NDK へのパスがローカルにダウンロードした NDK へのパスに自動的に紐づけられます。
    2. [Apply] をクリックします。

      図2. ローカルのデバッグ シンボルへのパスを指定

[Project] ウィンドウにネイティブのソースファイルが表示されます。 これで、通常どおりにネイティブのファイルを開いてブレークポイントを追加し、アプリをデバッグできます。

既知の問題点: APK にデバッグ シンボルを追加するには、APK とデバッグ可能な .so ファイルがともに同じワークステーションまたはビルドサーバーで作成されている必要があります。