AndroidアプリをNDKを使用して開発しています。2つのプロジェクトがあります。1つは、NDKを使用して.soファイルを生成するネイティブライブラリ用です。
Android Studioを使用していますが、ndk-buildを使用して自動ビルドと有効ビルドを無効にしています。Windows7を使用しています。
次に、.soファイルを生成した後、メインアプリケーションプロジェクトにそれらをコピーします。これも、ndk-buildを使用して、ライブラリの関数を呼び出すJNI関数をコンパイルします。この時点まできれいになってほしいです。そうでない場合は、リクエストに応じて詳細をお知らせします。
Android Studioを使用してデバイスでアプリケーションを実行しています。ブレークポイントをJavaコードに挿入してデバッグできますが、JNIをデバッグできません)呼び出しと、別のプロジェクトにあるネイティブコード。ライブラリコード内でデバッグする必要があります。これを達成する方法はありますか?
VisualGDBを見たことはありますが、有料です。私のデバッグ要件を完全に満たすための代替策があるかどうかを知らせてください。私はたくさん検索しましたが、具体的な解決策はありませんでした。
Android Studioに接続するためのスタジオを表示Androidプロセスで実行中のデバイスを表示できますが、デバッグするためにその使用方法がわかりませんネイティブライブラリコード(アクティビティのない別のプロジェクトにあります)。
詳細が必要な場合はお知らせください
Android Studio 2.0プレビューでは、プロセスが少し異なります(私が思うに簡単です):
それが機能しない場合は、ネイティブ構成のデバッグタイプが「ハイブリッド」選択されていることを確認します。再生ボタンの右側にある小さな三角形をクリックし、「構成の編集」を選択し、「アプリを選択します-native」構成の場合、[Debugger]タブに移動し、[Debug type:Hybrid]を選択します。
Android Studio 1.3以降はネイティブデバッグをサポートしています。
設定するには、次の手順に従います。
- このガイド に示すように、gradle-wrapper.properties、local.properties、および両方のbuild.gradleファイルを変更します。
- グラドルを同期
新しいビルド構成を作成して選択します。
実行ボタンの横にあるドロップダウンをクリックします)->設定を編集し、プラス記号をクリックし、Androidネイティブを選択し、右側にオプションを入力します(ネイティブデバッガータブでLLDBを使用しました)。悩ませる。
C++でブレークポイントを設定する
- デバッグボタンを押して、しばらくお待ちください(デバッガがしばらくかかることがあります)
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でネイティブにデバッグすることができました。
ブレークポイントを設定してネイティブコードにステップインすることはできましたが、次の条件がすべて当てはまる場合のみです。
Android Studio 1.5、 Gradle Experimental Pluginを使用
ネイティブコードのブレークポイントが機能しない場合の別のチェックポイント:
Android:extractNativeLibs="false"
行またはAndroidManifest.xmlでtrueに設定extractNativeLibs="false"
は1または2を引き起こすことがあります。
すべてを試してもネイティブブレークポイントがヒットしない場合、そして偶然にもネイティブライブラリが複数の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')