AndroidStudio3.x Android-NDKをデバッグするC++コードの開発
6275 ワード
一、新規プロジェクト
新しいプロジェクトは、Include C++Supportオプションが見つかりませんでした.この選択肢があったという印象だったので、半日探しても見つからなかった.
それから何気なく窓の大きさを引きずって、もとは隠されて、本当に穴があいています.
新しいテスト項目を作成し、Include C++Supportオプションにチェックを入れて、工事上の違いを見てみましょう.
1、gradle
まずgradleファイルを見てandroidノードの下に追加します.
defaultConfigノードの下に追加:
2、CPP
Javaノードと同じクラスにcppが1つ増えたノードで、対応ディレクトリはsrcmaincppで、srcmainjavaと同じクラスで、デフォルトではnative-libが1つしかありません.cppファイル、ありません.mkファイルその他、比較的簡単です:
3、CMakeLists.txt
アプリディレクトリの下にCMakeListsが1つ追加されました.txtファイル.
ここでnative-libは最終生成SOの名称(libnative-lib.so)であり、デフォルトCPUはarmeabi-v 7 aである
デフォルトのエンジニアリングプロパティは構成されません.debuggerのデフォルトはautoで自動的に適合し、直接cppでブレークポイントを下ろし、デバッグ方式でAppを実行すると、自動的にブレークし、変数の数値はデバッグ状態で見ることができます.
Android StudioのNDKへのデバッグサポートを試してみましたが、過去のプロジェクトもサポートしようと思います.方法は次の節を見てください.
二、既存項目
1、C++デバッガLLDBを取り付ける
Android Studioでnativeのコードをデバッグしたことがないため、Android StudioでNDKをデバッグするにはLLDBのプラグインが必要で、デフォルトではないことがネット上で分かったので、手動でインストールしておきます.
ここで別の方法があります.「Edit Configurations」はプログラム構成を開き、debuggerでNative(デフォルトはauto)を選択してAppを実行します.工事前はJavaコードしかなかったので、ここでNativeを選択します.Android StudioはC++のデバッガがインストールされていないことをヒントにインストールすればいいです.
インストールされているデバッガはLLDBであることがわかります.
2、Link C++ Project with Gradle
旧プロジェクトにNDKのサポートを追加し、右クリックでプロジェクト選択メニュー:Link C++Project with Gradle
コンパイル方法は2種類あります:CMakeとndk-build、その中でndk-buildは伝統的な方法で、Android StudioはデフォルトでCMake方式を推薦して、これは後で主流の方式かもしれませんので、私たちはデフォルトのCMakeを選びます.
次に、CMakeListsを指定する.txtファイルのパスです.ここでは、新規プロジェクトのCMakeListsをコピーできます.txtファイルを既存のプロジェクトのappディレクトリの下に配置し、proguard-rules.Pro同じフォルダの下でいいです.そしてこのCMakeListsをtxtファイルのフルパスを入力し、OKをクリックします.
gradleファイルが自動的に追加されたことがわかります.
ただし、C++のバージョンは指定されていません.新しいプロジェクトの内容を参照して手動で追加できます.
3、C++ソースコードのファイル組織形式を整理する
新しいcppディレクトリ:srcmaincpp、srcmainjavaと同級で、C++ソースファイルをこのディレクトリの下に移動し、秩序正しく整理します.
4、CMakeListsを修正する.txt
コピーされたdemoエンジニアリングのCMakeListsであるため.txtファイルは、比較的簡単で、既存の工事を満たすことができず、修正する必要があります.ここでよく使われるいくつかの機能について説明します.他の接尾辞ファイル(例.Sアセンブリファイル)をコンパイル可能なソースファイルとして設定: 複数の不定数のソースファイルを設定する(すなわち、*アスタリスクワイルドカードを使用する方法): .リンクサードパーティSOライブラリファイル(たとえば、サードパーティのlibsubstrate.soライブラリを使用してテストする必要がある):
5、debuggerをデフォルトのautoに復元する
「Edit Configurations」はプログラム構成を開き、debuggerでautoを選択します.前にNativeに変更したからです.これにより、JavaコードでもC++コードでもデバッグできます.
三、CMakeLists.txt構成および学習リソース
これは勉強を続ける必要があります.結局、新しい接触は、いくつかの参考書類があります. CMakeList配置のコンパイルが複数ある.cppファイル客 CMakeラーニング(一):リンクサードパーティライブラリ を使用
四、まとめはC++コードのダイナミックデバッグをサポートすることができ、間違いなく非常に強力な機能であり、現在Android StudioはC++コードに対してエディタでもよくサポートされているので、全体的に移行することをお勧めします. 不足はコンパイル速度が遅すぎて、VisualStudioのコンパイルが秒で完了し、Android Studioは10数秒以上かかります.デバッグ時にLLDBを起動するのも遅く、Starting LLDB server にずっと詰まっている場合があります. VSは本方法と組み合わせて使用することを推奨し、デバッグが必要な場合はAndroid Studioでデバッグし、C++コードをコンパイルするだけでVSを使用することができる.VSの方法は、VisualStudioを使用してAndroidNDK を効率的に開発デバッグする
新しいプロジェクトは、Include C++Supportオプションが見つかりませんでした.この選択肢があったという印象だったので、半日探しても見つからなかった.
それから何気なく窓の大きさを引きずって、もとは隠されて、本当に穴があいています.
新しいテスト項目を作成し、Include C++Supportオプションにチェックを入れて、工事上の違いを見てみましょう.
1、gradle
まずgradleファイルを見てandroidノードの下に追加します.
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
defaultConfigノードの下に追加:
externalNativeBuild {
cmake {
cppFlags "-std=c++14"
}
}
2、CPP
Javaノードと同じクラスにcppが1つ増えたノードで、対応ディレクトリはsrcmaincppで、srcmainjavaと同じクラスで、デフォルトではnative-libが1つしかありません.cppファイル、ありません.mkファイルその他、比較的簡単です:
#include
#include
extern "C"
JNIEXPORT jstring
JNICALL
Java_com_bigsing_myapplication_MainActivity_stringFromJNI(
JNIEnv *env,
jobject /* this */) {
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}
3、CMakeLists.txt
アプリディレクトリの下にCMakeListsが1つ追加されました.txtファイル.
# For more information about using CMake with Android Studio, read the
# documentation: https://d.android.com/studio/projects/add-native-code.html
# Sets the minimum version of CMake required to build the native library.
cmake_minimum_required(VERSION 3.4.1)
# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds them for you.
# Gradle automatically packages shared libraries with your APK.
add_library( # Sets the name of the library.
native-lib
# Sets the library as a shared library.
SHARED
# Provides a relative path to your source file(s).
src/main/cpp/native-lib.cpp )
# Searches for a specified prebuilt library and stores the path as a
# variable. Because CMake includes system libraries in the search path by
# default, you only need to specify the name of the public NDK library
# you want to add. CMake verifies that the library exists before
# completing its build.
find_library( # Sets the name of the path variable.
log-lib
# Specifies the name of the NDK library that
# you want CMake to locate.
log )
# Specifies libraries CMake should link to your target library. You
# can link multiple libraries, such as libraries you define in this
# build script, prebuilt third-party libraries, or system libraries.
target_link_libraries( # Specifies the target library.
native-lib
# Links the target library to the log library
# included in the NDK.
${log-lib} )
ここでnative-libは最終生成SOの名称(libnative-lib.so)であり、デフォルトCPUはarmeabi-v 7 aである
デフォルトのエンジニアリングプロパティは構成されません.debuggerのデフォルトはautoで自動的に適合し、直接cppでブレークポイントを下ろし、デバッグ方式でAppを実行すると、自動的にブレークし、変数の数値はデバッグ状態で見ることができます.
Android StudioのNDKへのデバッグサポートを試してみましたが、過去のプロジェクトもサポートしようと思います.方法は次の節を見てください.
二、既存項目
1、C++デバッガLLDBを取り付ける
Android Studioでnativeのコードをデバッグしたことがないため、Android StudioでNDKをデバッグするにはLLDBのプラグインが必要で、デフォルトではないことがネット上で分かったので、手動でインストールしておきます.
ここで別の方法があります.「Edit Configurations」はプログラム構成を開き、debuggerでNative(デフォルトはauto)を選択してAppを実行します.工事前はJavaコードしかなかったので、ここでNativeを選択します.Android StudioはC++のデバッガがインストールされていないことをヒントにインストールすればいいです.
インストールされているデバッガはLLDBであることがわかります.
2、Link C++ Project with Gradle
旧プロジェクトにNDKのサポートを追加し、右クリックでプロジェクト選択メニュー:Link C++Project with Gradle
コンパイル方法は2種類あります:CMakeとndk-build、その中でndk-buildは伝統的な方法で、Android StudioはデフォルトでCMake方式を推薦して、これは後で主流の方式かもしれませんので、私たちはデフォルトのCMakeを選びます.
次に、CMakeListsを指定する.txtファイルのパスです.ここでは、新規プロジェクトのCMakeListsをコピーできます.txtファイルを既存のプロジェクトのappディレクトリの下に配置し、proguard-rules.Pro同じフォルダの下でいいです.そしてこのCMakeListsをtxtファイルのフルパスを入力し、OKをクリックします.
gradleファイルが自動的に追加されたことがわかります.
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
ただし、C++のバージョンは指定されていません.新しいプロジェクトの内容を参照して手動で追加できます.
externalNativeBuild {
cmake {
cppFlags "-std=c++14"
}
}
3、C++ソースコードのファイル組織形式を整理する
新しいcppディレクトリ:srcmaincpp、srcmainjavaと同級で、C++ソースファイルをこのディレクトリの下に移動し、秩序正しく整理します.
4、CMakeListsを修正する.txt
コピーされたdemoエンジニアリングのCMakeListsであるため.txtファイルは、比較的簡単で、既存の工事を満たすことができず、修正する必要があります.ここでよく使われるいくつかの機能について説明します.
set_property(SOURCE src/main/cpp/art/art_quick_dexposed_invoke_handler.S PROPERTY LANGUAGE C)
file(GLOB native_srcs "src/main/cpp/*.cpp" "src/main/cpp/dalvik/*.cpp" "src/main/cpp/art/*.cpp" "src/main/cpp/art/*.S")
add_library( # Sets the name of the library.
native-lib
# Sets the library as a shared library.
SHARED
# Provides a relative path to your source file(s).
${native_srcs}
)
file(GLOB libs src/main/cpp/3rd/libsubstrate.so src/main/cpp/3rd/libsubstrate-dvm.so)
target_link_libraries( # Specifies the target library.
native-lib
# Links the target library to the log library
# included in the NDK.
${libs}
${log-lib} )
5、debuggerをデフォルトのautoに復元する
「Edit Configurations」はプログラム構成を開き、debuggerでautoを選択します.前にNativeに変更したからです.これにより、JavaコードでもC++コードでもデバッグできます.
三、CMakeLists.txt構成および学習リソース
これは勉強を続ける必要があります.結局、新しい接触は、いくつかの参考書類があります.
四、まとめ