C++のいろいろ
C++11化
int32_t使いたいです。
まずは build.gradle(Module: app)の一部を
android.ndk { moduleName = "MainNative" ldLibs += ["android", "log"] // <- ライブラリを追加 }
に編集すると「NativeMain.cpp」でint32_t などが使えるようになります。
#include <cstdint> // <- インクルードしましょう #include <jni.h> extern "C" { void Java_sample01_example_com_myapplication_MainActivity_mainTest( JNIEnv* env, jobject thiz ) { int32_t a; // <- 定義できますね a= 10; } }
STLを使うには
まずは build.gradle(Module: app)の一部を
android.ndk { moduleName = "MainNative" ldLibs += ["android", "log"] stl = "stlport_static" //<- 設定追加 }
に編集すると「NativeMain.cpp」でvector などのSTL使えるようになります。
#include <cstdint> #include <jni.h> #include <vector> extern "C" { void Java_sample01_example_com_myapplication_MainActivity_mainTest( JNIEnv* env, jobject thiz ) { int32_t a; std::vector test; //<- vector 使ってもおこられない a= 10; } }
ラムダ関数を使うには
やっぱ、C++11でラムダ関数つかいたいですね。
その場合、 build.gradle(Module: app)の一部を
android.ndk { moduleName = "MainNative" ldLibs += ["android", "log"] stl = "c++_static" // <-これで }
感じでいけそうです。
サンプル
GutHubのサンプルを参考になります。
https://github.com/googlesamples/android-ndk