Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

事前ビルド済み 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 のように、パッケージ化されていない APK ファイルが表示されます。 ここで提供されるのは、完全に逆コンパイルされたファイルのセットではありませんが、.dex ファイルを人間にとって読みやすくした .smali ファイルです。

図 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 ソースをアタッチし、.kt / .java ファイル内にブレークポイントを追加する必要があります。同様に、ネイティブ コードをデバッグするには、ネイティブ デバッグ シンボルをアタッチする必要があります。

Kotlin / Java ソースをアタッチする

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

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

  1. [Project] パネル([Android] ビューを使用)で、.smali ファイルをダブルクリックします。ファイルを開くとエディタにバナーが表示され、Kotlin / Java ソースを選択するよう求められます。

ソースバナーをアタッチする

  1. エディタ ウィンドウの上部にあるバナーで、[Attach Kotlin/Java Sources] をクリックします。
  2. アプリの Kotlin / Java ソースファイルがあるディレクトリに移動して、[Open] をクリックします。

[Project] ウィンドウで、IDE により .smali ファイルが対応する .kt または .java ファイルに置き換えられます。また、内部クラスも自動的に組み込まれます。これで、通常どおりにブレークポイントを追加し、アプリのデバッグを行えます。

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

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

ビルド ID を使用して APK 内にネイティブ ライブラリをビルドした場合、Android Studio は、シンボル ファイル内のビルド ID がネイティブ ライブラリ内のビルド ID と一致するかどうかをチェックし、一致しない場合はシンボル ファイルを拒否します。ビルド ID を使用してビルドしていない場合、不適切なシンボル ファイルを指定すると、デバッグ時に問題が発生することがあります。

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

  1. NDK とツールをまだダウンロードしていない場合は、必ずダウンロードしてください。
  2. [Project] ウィンドウの [cpp] ディレクトリ([Android] ビューを選択した場合に限り表示されます。図 2 を参照)の下で、デバッグ シンボルを含まないネイティブ ライブラリ ファイルをダブルクリックします。その APK がサポートするすべての ABI の表がエディタ ウィンドウに表示されます。
  3. エディタ ウィンドウの右上隅にある [Add] をクリックします。
  4. アタッチするデバッグ可能なネイティブ ライブラリがあるディレクトリに移動し、[OK] をクリックします。

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

  1. 図 2 に示すように、エディタ ウィンドウの [Path Mappings] で、[Local Paths] 列のフィールドを編集して、不足しているデバッグ シンボルのローカルパスを追加します。ほとんどの場合、ルートフォルダのパスを指定するだけでよく、Android Studio が自動的にサブディレクトリを調査して追加ソースをマッピングします。また、IDE が自動的にリモート 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 を再インポートするオプションを提供します。

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