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