NDKで開発を行なっているとSDKから比べるとまだまだ環境構築の段階すら「むむむ」となる事が多いのが現状。
自分一人で開発している時は、あまり気にならないのかも知れませんが他の人が作成したライブラリ等を一緒にビルドしないといけない場合などあれ?と思うかもしれません。
静的に取り込んでしまうなら問題ないかもしれませんが他の人が作ったlibは、そのままの姿(ファイル)でビルド時に自動的にコピーだけしたいです。 という時Linux等で開発している方は、makeファイルの書き方の一つや二つご存知だと思いますがWindows系の方は、チンプンカンプンな方が多いことでしょう。
例えばどこからとも無く拾ってきたNDK用のバイナリlibを使用したい。更に自分で作成した別モジュールも別ファイルとして使いたい。
ビルド時には、libフォルダの下は、クリーンされるから拾ってきた既成のモジュールも削除されてしまう。
どうしたら良いのだ?
そんな際は、makeファイルにコピーだけ行なう設定ができます。
普段良く目にする自分で作成したモジュールは、 下記のように設定する筈です。
include $(BUILD_SHARED_LIBRARY)
コピーしたい時は、ここを下記のように変更します。
include $(PREBUILT_SHARED_LIBRARY)
するとビルド時に自動的に適切にコピーしてくれます。
ここまでは、NDKをインストールした際に一緒についてくるマニュアル(ndkインストール先のdocumentation.html)に記述されているのでたどり着いた方は、多いと思いますがじゃ「実際どうやるのさ?」、「パスが解からん」などで投げ出した方もう少しです。
まず、libやjniフォルダと同じ階層に適当にフォルダを作成します。
ここでは、「external/lib/」 とします。
で、作成した「external/lib/」以下にそのままコピーだけしたいモジュールをコピーします。
例として「libsample.so」を使用します。
今回自分で作成するモジュールは、「libmymodule.so」
LOCAL_SRC_FILESでコピーするモジュールを格納したフォルダの相対パスを設定。
基準は、jniフォルダと同階層。
Android.mk
**************************
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := prebuilt-libsample
LOCAL_SRC_FILES := external/lib/libsample.so
include $(PREBUILT_SHARED_LIBRARY)
#↑ここから上がコピーしたいモジュール
#↓ここから下が自分のモジュール
include $(CLEAR_VARS)
LOCAL_MODULE := mymodule
LOCAL_SRC_FILES := mymodule.cpp
LOCAL_PRELINK_MODULE := false
LOCAL_LDLIBS := -llog
LOCAL_SHARED_LIBRARIES := prebuilt-libsample
include $(BUILD_SHARED_LIBRARY)
**************************
各パラメータの詳細は、NDKインストール先の「documentation.html」を突っついて「Android.mk File」を開いて確認してください。
NDK r7 PREBUILTS.HTML
↑古いこの方が読みやすいかも。
Android NDK ネイティブプログラミング
Android NDK Beginner's Guide: Discover the Native Side of Android and Inject the Power of C/C++ in Your Applications
0 件のコメント :
コメントを投稿