Android NDKでSTLを使う
Androidでなんかやりたいなーと思いながら,土日でAndroid再入門 - Twitterクライアントを作ってみようを読みながらtwitterクライアントのようなものを作りました.
そのままだとUIがちょっとさみしいのでActionBarShaerlockという素敵なライブラリを使ってもっと頑張ろうというのはまた別の話.
Why NDK
この間つくったBackPropagationのプログラムをAndroid上で動かせないかなというのが事の始まりでした.完全にJavaに移植しても良かったのですが,
Download SDK
まず,Androidの開発環境の構築ですが,AndroidSDKでぐぐってトップに出てくるページにアクセスして,
Download the SDKをぽちっと押し,適当なフォルダに展開すればそれで8割終わりです.
Eclipseが入ってるのでそれを使って開発します.
次にNDK
Android NDKを使った開発環境の構築 - Yahoo!知恵袋が詳しいので,これにそってやってれば概ね問題ないです.NDKのダウンロードはここから.
- NDKをダウンロードして,適当なフォルダに展開
- Window > Android > NDKでパスを設定
jniディレクトリとかができます.
関数名は指定された形式である必要があるので,javahとかいうやつを使ってヘッダファイルを作成するんですが,
微妙にエラーが出たりします.
ここでちょこっと設定
jniディレクトリに,Application.mkファイルを追加.
APP_PLATFORM := android-10 #Android2.2でも動かしたいなら8
これで,テキストエディタにフォーカスした状態でcreate header file for NDKを動作させればヘッダファイルができるはず.
ヘッダができたら,宣言部分を.cppファイルの方にコピーして実装していく.
そしてSTL
STLを使う場合は,Application.mkに追記APP_STL := stlport_static
ただ,ビルドが通ってもYour project contains error(s)とか言いやがってAndroidアプリケーションとして実行できない事案が発生していて辛い.
追記
ググったら解決できた.
Project->Properties->C/C++ General->Includesで以下3つを追加して,Application.mkを変更
PATH_TO_NDK/sources/cxx-stl/gnu-libstdc++/include
PATH_TO_NDK/sources/cxx-stl/gnu-libstdc++/libs/armeabi/include
PATH_TO_NDK/sources/cxx-stl/gnu-libstdc++/libs/armeabi-v7a/include
APP_STL := gnustl_static
に変更
2013/06/09追記
APP_STL := gnustl_staticさえApplication.mkを作成して記述しておけばSTLが使えた感じある.
C++11の機能を使う場合は,Android.mkに LOCAL_CFLAGS := -std=c++11 を追加.
参考