openFrameworksの本家は
こちら。
これを知ったのは、KINECTでカッコいい処理をしている物を見て、これは!!と思ったからかな。
KINECT openFrameworksで検索すると山のように実装例が出てくるから、こういう物だと思って…
Mac(Xcode)/iPhone/Linux(CodeBlocks)/Windows(VS2010,2008)がメインのサイトから落とせる。
あと、Android+Eclipse用の
コードもあるけど…この通りにやっても見事に動かない報告が多数...orz
そして、最近リリースされたNDK R5でも見事にダメだった。
NDK R5はSTLが導入されているけど、of内で使っている
POCOのSTLと見事にかみ合わない。
NDK R5のSTLはまだまだ不十分っぽい。
ということで、NDK R4でSTL/exception/RTTIを導入した
crystax's NDKを使ってみたら…あっさり動いたー
このOFの何が自分的に素敵に感じたかって言うと…
・その名の通り、オープンなマルチメディア&画像処理用C++フレームワーク
・フレームワークだから使い方を覚えれば楽チン
・画像、音声、動画、OpenCV...etc とネットワーク、スレッド用のクラスもある
・Win/Mac/Linux(Android)のどれでもOK
すてき~。
Androidに限って言うと、JNI経由(NDK)で書けるのがGood。重い処理はNDKにやらせて、ほかは普通にJavaで書けばオッケーだもんね。
NDK r5ではまだ動かせてないけど、Native Activityを使ったり出来れば、カッコいい感じになりそーな予感。
STL部分を差し替えればNDK R5でも普通に動くと思う。(まだやっていない)
で、Android+OFの環境構築方法は…基本的には
本家のこの流れでOK
だけど、NDK R5のSTLを使うとかなり難しいと思われ。(相当ハマりまくった…
軽く流れだけ。
■ディレクトリの構成
ダウンロードしてきた、NDK配下にofを配置する。
android-ndk-r4-crystax\of_preRelease_v0062_android_FAT
こんな感じ。
1. openFrameworksのインポート
次にダウンロードしてきた、of_preRelease_v0062_android_FATの中から、
libs
libs/openFrameworks
addons
addons/ofxAndroid/ofAndroidLib
のプロジェクトをEclipseでImportする。
C++でビルドするものは、libs/openFrameworks、addonsだけ。
2. openFrameworks本体のビルド
[Properties]->[C/C++ General]->[Paths and Symbols]のIncludesに以下を追加
${NDK_ROOT}/build/prebuilt/windows/arm-eabi-4.4.0/arm-eabi/include/c++/4.4.0
${NDK_ROOT}/build/prebuilt/windows/arm-eabi-4.4.0/arm-eabi/include/c++/4.4.0/arm-eabi
[Properties]->[C/C++ Build]->[Settings]->[GCC C++ Compiler]->[Preprocessor]に__ANDROID__を追加
[C/C++ Build]のBuilderの設定を[Internal builder]に設定。
(ただし、c:\cygwin\binのようにcygwin1.dllにパスが通っていること)
あとは、NDK_ROOTにcrystax's NDKへのパスを設定すればビルドが通って、libopenFrameworks.aが出来ていると思われ。
3. addonsのビルド
openFrameworksの本体をビルドする時と同じPropertiesの設定をすればビルドが通って、libaddons.aが出来ている。
4. Androidプロジェクトを作って、JNIとくっつける。
僕の場合は、
android-ndk-r4-crystax\apps\[Eclipse Android Project]
にプロジェクトを作っています。
全体的には、
android-ndk-r4-crystax\apps\[Eclipse Android Project]\Application.mk
android-ndk-r4-crystax\apps\[Eclipse Android Project]\jni\Android.mk
android-ndk-r4-crystax\apps\[Eclipse Android Project]\jni\Ball.h
android-ndk-r4-crystax\apps\[Eclipse Android Project]\jni\main.cpp
android-ndk-r4-crystax\apps\[Eclipse Android Project]\jni\testApp.cpp
android-ndk-r4-crystax\apps\[Eclipse Android Project]\jni\testApp.h
jni以下のソースは例えば、of_preRelease_v0062_android_FAT\apps\androidExamples\androidTouchExample\srcとかから取得。
5.jniのビルド。
Application.mkの内容
---------------------------
APP_PROJECT_PATH := $(call my-dir)
LOCAL_MODULE := OFAndroidApp
APP_ABI := armeabi armeabi-v7a
----------------------------
Android.mkの内容
-----------------------------------
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := OFAndroidApp
LOCAL_SRC_FILES := testApp.cpp main.cpp
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../../build/prebuilt/windows/arm-eabi-4.4.0/arm-eabi/include/c++/4.4.0 \
$(LOCAL_PATH)/../../../build/platforms/android-8/arch-arm/usr/include \
$(LOCAL_PATH)/../../../build/prebuilt/windows/arm-eabi-4.4.0/arm-eabi/include/c++/4.4.0/arm-eabi \
$(LOCAL_PATH)/../../../of_preRelease_v0062_android_FAT/libs/openFrameworks \
$(LOCAL_PATH)/../../../of_preRelease_v0062_android_FAT/libs/openFrameworks/app/ \
$(LOCAL_PATH)/../../../of_preRelease_v0062_android_FAT/libs/openFrameworks/communication \
$(LOCAL_PATH)/../../../of_preRelease_v0062_android_FAT/libs/openFrameworks/events \
$(LOCAL_PATH)/../../../of_preRelease_v0062_android_FAT/libs/openFrameworks/graphics \
$(LOCAL_PATH)/../../../of_preRelease_v0062_android_FAT/libs/openFrameworks/sound \
$(LOCAL_PATH)/../../../of_preRelease_v0062_android_FAT/libs/openFrameworks/utils \
$(LOCAL_PATH)/../../../of_preRelease_v0062_android_FAT/libs/freetype/include \
$(LOCAL_PATH)/../../../of_preRelease_v0062_android_FAT/libs/freetype/include/freetype2 \
$(LOCAL_PATH)/../../../of_preRelease_v0062_android_FAT/libs/glu/include_android \
$(LOCAL_PATH)/../../../of_preRelease_v0062_android_FAT/libs/FreeImage/include \
$(LOCAL_PATH)/../../../of_preRelease_v0062_android_FAT/libs/poco/include \
$(LOCAL_PATH)/../../../of_preRelease_v0062_android_FAT/libs/openFrameworks/video \
$(LOCAL_PATH)/../../../of_preRelease_v0062_android_FAT/addons/ofxOpenCv/src/ \
$(LOCAL_PATH)/../../../of_preRelease_v0062_android_FAT/addons/ofxAndroid/src
LOCAL_CXXFLAGS += -DANDROID -D__ANDROID__ -isystem $(SYSROOT)/usr/include
LOCAL_CFLAGS += -DANDROID -D__ANDROID__ $(LOCAL_C_INCLUDES:%=-I%)
LOCAL_LDLIBS := -L$(LOCAL_PATH)/../../../build/prebuilt/windows/arm-eabi-4.4.0/arm-eabi/lib/ \
-L$(LOCAL_PATH)/../../../build/platforms/android-8/arch-arm/usr/lib \
-L$(LOCAL_PATH)/../../../build/prebuilt/windows/arm-eabi-4.4.0/lib/gcc/arm-eabi/4.4.0/ \
-L$(LOCAL_PATH)/../../../of_preRelease_v0062_android_FAT/libs/openFrameworks/Debug/ \
-L$(LOCAL_PATH)/../../../of_preRelease_v0062_android_FAT/addons/Debug/ \
-L$(LOCAL_PATH)/../../../of_preRelease_v0062_android_FAT/libs/poco/lib/android/ \
-L$(LOCAL_PATH)/../../../of_preRelease_v0062_android_FAT/libs/FreeImage/lib/android/ \
-L$(LOCAL_PATH)/../../../of_preRelease_v0062_android_FAT/libs/freetype/lib/android/ \
-L$(LOCAL_PATH)/../../../of_preRelease_v0062_android_FAT/libs/glu/lib/android/ \
-L$(LOCAL_PATH)/../../../of_preRelease_v0062_android_FAT/addons/ofxOsc/libs/oscpack/lib/android/ \
-L$(LOCAL_PATH)/../../../of_preRelease_v0062_android_FAT/addons/ofxOpenCv/libs/opencv/lib/android/ \
-ldl -lstdc++ -lgcc -llog -lm -lc -laddons -loscpack -lopenFrameworks -lPocoUtil -lPocoFoundation -lfreetype -lfreeimage -lGLU -lz -lGLESv1_CM
include $(BUILD_SHARED_LIBRARY)
-----------------------------------
こんな感じ。パスは実際の環境に合わせて書く。
あとはNDK_ROOT(crystax's NDK直下)で、
make APP=[Eclipse Android Project]
としてうまくいけば、
android-ndk-r4-crystax\apps\[Eclipse Android Project]\libs\armeabi\libOFAndroidApp.so
android-ndk-r4-crystax\apps\[Eclipse Android Project]\libs\armeabi-v7a\libOFAndroidApp.so
とかが出来ているはず。
6. Androidプロジェクトのビルド
[Properties]->[Android]->[Library]にofAndroidLibを追加。
OFActivity.javaとかは、OFのサンプルをコピーして使う。
resとかのリソースファイルもサンプルにあるものをコピーして使う。
これで使えるはず。
要はOFのC++ライブラリはEclipse上でビルドして、NDKが絡む所はAndroidの作法に従って作れば、以外に簡単に環境は作れる。
さー、色々実験だね。
Recent Comments