事前ビルド済み APK をデバッグする

Android Studio 3.0 以降の場合は、Android Studio プロジェクトから APK をビルドすることなく、デバッグ機能が有効になっている APK のプロファイリングやデバッグを行えます。

APK のデバッグを開始する手順は次のとおりです。

  1. Android Studio のウェルカム画面で、[Profile or debug APK] をクリックします。

    すでにプロジェクトを開いている場合は、メニューバーで [File] > [Profile or Debug APK] をクリックします。

  2. 表示されたダイアログで、Android Studio にインポートする APK を選択します。

  3. [OK] をクリックします。

このオプションが表示されない場合は、「Android APK Support」プラグインが有効になっていることを確認してください。

すると、図 1 のように、パッケージ化されていない APK ファイルが表示されます。 ここで表示されるのは、完全に逆コンパイルされたファイルのセットではありませんが、DEX ファイルよりも人間にとって読みやすいバージョンの SMALI ファイルが表示されます。

ビルド済み APK を Android Studio にインポートする

図 1. ビルド済み APK を Android Studio にインポートする

[Project] ペインの [Android] ビューでは、APK の以下の内容を調べることができます。

  • APK ファイル: APK をダブルクリックして APK Analyzer を開きます。
  • manifests: APK から抽出されたアプリ マニフェストが格納されます。
  • java: Android Studio によって APK の DEX ファイルから(SMALI ファイルに)逆アセンブルされた Kotlin コードまたは Java コードが含まれます。このディレクトリ内の各 SMALI ファイルは Kotlin クラスまたは Java クラスに対応しています。
  • cpp: アプリにネイティブのコードが含まれている場合は、このディレクトリに APK のネイティブ ライブラリ(SO ファイル)が格納されます。
  • External Libraries: Android SDK が格納されます。

Android Profiler を使用して、アプリの性能テストを開始できます。

アプリの Kotlin または Java コードをデバッグするには、Kotlin または Java のソースをアタッチし、Kotlin または Java のソースファイルにブレークポイントを追加する必要があります。同様に、ネイティブ コードをデバッグするには、ネイティブ デバッグ シンボルをアタッチする必要があります。

Kotlin または Java のソースをアタッチする

Android Studio はデフォルトで、APK から Kotlin コードまたは Java コードを抽出し、SMALI ファイルとして保存します。ブレークポイントを使用して Kotlin コードまたは Java コードをデバッグするには、IDE に対して、デバッグする SMALI ファイルに対応する Kotlin ソースファイルまたは Java ソースファイルを指定する必要があります。

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

  1. [Android] ビューの [Project] パネルで SMALI ファイルをダブルクリックします。ファイルを開くとエディタにバナーが表示され、Kotlin または Java のソースを選択するよう求められます。ソースバナーをアタッチする
  2. エディタ ウィンドウのバナーで [Attach Kotlin/Java Sources...] をクリックします。
  3. アプリの Kotlin または Java のソースファイルがあるディレクトリに移動して、[Open] をクリックします。

[Project] ウィンドウで、Android Studio により、SMALI ファイルが対応する Kotlin または Java のソースファイルに置き換えられます。Android Studio では、内部クラスも自動的に含まれます。これで、ブレークポイントを追加してアプリをデバッグできるようになります。

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

APK 内のネイティブ ライブラリ(SO ファイル)にデバッグ シンボルが含まれていない場合は、図 1 のようなバナーが Android Studio に表示されます。APK のネイティブ コードをデバッグする、またはブレークポイントを使用するには、デバッグ可能なネイティブ ライブラリをアタッチする必要があります。

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

  1. NDK とツールをまだダウンロードしていない場合は、ダウンロードします。
  2. [Android] ビューで、[Project] ウィンドウの [cpp] ディレクトリにあるデバッグ シンボルを含まないネイティブ ライブラリ ファイルをダブルクリックします。

    その APK がサポートするすべての ABI の表がエディタ ウィンドウに表示されます。

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

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

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

  1. 図 2 に示すように、エディタ ウィンドウの [Path Mappings] で、[Local Paths] 列のフィールドを編集して、不足しているデバッグ シンボルのローカルパスを追加します。

    ほとんどの場合、ルートフォルダのパスを指定するだけでよく、Android Studio が自動的にサブディレクトリを調査して追加ソースをマッピングします。また、Android Studio は、リモート NDK へのパスをローカル NDK ダウンロードに自動的にマッピングします。

  2. エディタ ウィンドウの [Path Mappings] で、[Apply Changes] をクリックします。

ローカル デバッグ シンボルのパスを指定する

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

[Project] ウィンドウにネイティブ ソースファイルが表示されます。これらのネイティブ ソースファイルを開いてブレークポイントを追加し、アプリをデバッグします。マッピングを削除するには、エディタ ウィンドウの [Path Mappings] で、[Clear] をクリックします。

既知の問題: APK にデバッグ シンボルをアタッチする場合は、APK とデバッグ可能な SO ファイルの両方を同じワークステーションまたはビルドサーバーでビルドする必要があります。

Android Studio 3.6 以降では、APK が IDE の外部で更新された場合でも、新しいプロジェクトを作成する必要はありません。Android Studio は APK の変更を検出し、APK を再インポートするオプションを提供します。

更新した APK をインポートする

図 3. Android Studio の外部で更新された APK は再インポートできます。