web-dev-qa-db-ja.com

NDKネイティブコードでブレークポイントを取得し、Android Studioでネイティブコードをデバッグする方法は?

AndroidアプリをNDKを使用して開発しています。2つのプロジェクトがあります。1つは、NDKを使用して.soファイルを生成するネイティブライブラリ用です。

Android Studioを使用していますが、ndk-buildを使用して自動ビルドと有効ビルドを無効にしています。Windows7を使用しています。

次に、.soファイルを生成した後、メインアプリケーションプロジェクトにそれらをコピーします。これも、ndk-buildを使用して、ライブラリの関数を呼び出すJNI関数をコンパイルします。この時点まできれいになってほしいです。そうでない場合は、リクエストに応じて詳細をお知らせします。

Android Studioを使用してデバイスでアプリケーションを実行しています。ブレークポイントをJavaコードに挿入してデバッグできますが、JNIをデバッグできません)呼び出しと、別のプロジェクトにあるネイティブコード。ライブラリコード内でデバッグする必要があります。これを達成する方法はありますか?

VisualGDBを見たことはありますが、有料です。私のデバッグ要件を完全に満たすための代替策があるかどうかを知らせてください。私はたくさん検索しましたが、具体的な解決策はありませんでした。

Android Studioに接続するためのスタジオを表示Androidプロセスで実行中のデバイスを表示できますが、デバッグするためにその使用方法がわかりませんネイティブライブラリコード(アクティビティのない別のプロジェクトにあります)。

詳細が必要な場合はお知らせください

22
Premal

Android Studio 2.0プレビューでは、プロセスが少し異なります(私が思うに簡単です):

  1. Install "LLDB":[ツール]-> [Android]-> [SDKマネージャー]に移動し、[SDKツール]タブに移動して、[LLDB]をオンにします(通常、リストの末尾近くにあります)。
  2. 「デバッグ」バリアントを選択:ASの左下隅にある「ビルドバリアント」をクリックします。デフォルトのデバッグバリアントは「デバッグ」と呼ばれます
  3. ネイティブ構成を選択:実行ボタンの左側(緑の三角形)、デフォルトのネイティブ構成は「app-native」と呼ばれます
  4. ブレークポイントを設定
  5. デバッグでアプリを起動実行ボタンの右側にある小さなバグをクリックしてください。

それが機能しない場合は、ネイティブ構成のデバッグタイプが「ハイブリッド」選択されていることを確認します。再生ボタンの右側にある小さな三角形をクリックし、「構成の編集」を選択し、「アプリを選択します-native」構成の場合、[Debugger]タブに移動し、[Debug type:Hybrid]を選択します。

12
Sistr

Android Studio 1.3以降はネイティブデバッグをサポートしています。

設定するには、次の手順に従います。

  1. このガイド に示すように、gradle-wrapper.properties、local.properties、および両方のbuild.gradleファイルを変更します。
  2. グラドルを同期
  3. 新しいビルド構成を作成して選択します。

    実行ボタンの横にあるドロップダウンをクリックします)->設定を編集し、プラス記号をクリックし、Androidネイティブを選択し、右側にオプションを入力します(ネイティブデバッガータブでLLDBを使用しました)。悩ませる。

  4. C++でブレークポイントを設定する

  5. デバッグボタンを押して、しばらくお待ちください(デバッガがしばらくかかることがあります)

Android Studio 1.3(stable channel)を使用してLubuntu 14.04でネイティブコードをデバッグできました。他の人はWindowsで成功していると思われますが、私は Windows 8.1のネイティブ(Android Studio 1.3、1.3.2、および1.4プレビュー3で試しました)。

アップデートAndroid Studio 1.4 Betaが出てきました。私はそれをテストし、Windows 8.1でネイティブにデバッグすることができました。

4
Nate

ブレークポイントを設定してネイティブコードにステップインすることはできましたが、次の条件がすべて当てはまる場合のみです。

  1. 生成されたネイティブライブラリの.soファイルは、デバッグシンボルを保持していました
  2. ソースが提供されました(「ライブラリプロパティ」メニューを参照)
  3. ネイティブデバッガーを使用するように実行/ビルド構成を設定します(説明 ここ )。

Android Studio 1.5、 Gradle Experimental Pluginを使用

2
Jeff Trull

ネイティブコードのブレークポイントが機能しない場合の別のチェックポイント:

  • 削除する Android:extractNativeLibs="false"行またはAndroidManifest.xmlでtrueに設定

extractNativeLibs="false"は1または2を引き起こすことがあります。

  1. インストールは「INSTALL_FAILED_INVALID_APK」というメッセージで失敗します
  2. ネイティブコードのブレークポイントが機能しない
1
Toris

すべてを試してもネイティブブレークポイントがヒットしない場合、そして偶然にもネイティブライブラリが複数のASプロジェクトで参照されていた場合は、簡単な解決策があります。

setting.gradleとbuild.gradleでネイティブライブラリの名前を変更するだけ

使用前:

//in setting.gradle
include ":myNativeLib"
project(":myNativeLib").projectDir = new File("...")
//in app's build.gradle
api project(':myNativeLib')

後:

//in setting.gradle
include ":myNativeLib2"
project(":myNativeLib2").projectDir = new File("...")
//in app's build.gradle
api project(':myNativeLib2')
0
wdanxna