Android NDKには標準でStandard Template Library「STL」が用意されている(ただし2010年末現在β実装)。今回はそれを使ってSTLプログラミングをしみる。
まずネイティブのソースコードをC++にするため拡張子をcppに変更する。

#include <string.h> #include <jni.h> #include <vector> #include <string> #include <iterator> #include <algorithm> extern "C" jstring Java_com_Test114_Test114Act_stringFromJNI(JNIEnv* env,jobject thiz) { std::vector<std::string> vstrTest; //ランダムに追加 vstrTest.push_back("A"); vstrTest.push_back("D"); vstrTest.push_back("C"); vstrTest.push_back("B"); //ソート std::sort(vstrTest.begin(),vstrTest.end()); //結果の結合 std::string strOut; { std::vector<std::string>::iterator ivnPos; for(ivnPos = vstrTest.begin(); ivnPos != vstrTest.end(); ivnPos++ ) strOut += *ivnPos; } //出力 return env->NewStringUTF(strOut.c_str()); }

LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := Test114jni LOCAL_SRC_FILES := Test114jni.cpp LOCAL_LDLIBS := -llog include $(BUILD_SHARED_LIBRARY)
このままではAndroid NDKはSTLを認識しない。STLを使えるようにするためにはApplication.mkファイルを用意する。jniフォルダを選択して右クリックして現れるメニューの「New」にある「File」を選択する。

APP_STL := stlport_static
これでビルド/実行すると、STLによってソートされた結果が表示された。

C:\Users\assist\Desktop\EasyProjectGenerator\Test114>bash -i -c "ndk-build" Compile++ thumb : Test114jni <= Test114jni.cpp StaticLibrary : libstdc++.a Prebuilt : libstlport_static.a <= <NDK>/sources/cxx-stl/stlport/libs/armea bi/ SharedLibrary : libTest114jni.so C:/android-ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld.exe: C:/Users/assist/Desktop/EasyProjectGenerator/Test114/obj/local/armeabi/libstlport_static.a: No such file: Permission denied collect2: ld returned 1 exit status make: *** [/cygdrive/c/Users/assist/Desktop/EasyProjectGenerator/Test114/obj/local/armeabi/libTest114jni.so] Error 1 C:\Users\assist\Desktop\EasyProjectGenerator\Test114>pause 続行するには何かキーを押してください . . .

APP_STL := stlport_static STLPORT_FORCE_REBUILD := true
プロジェクトファイルをダウンロード