私が欲しいものを手に入れる方法を考え出しました-ほとんどの情報は(もちろん)NDKドキュメントにありますが、私がやろうとしていたことはADT内で100%サポートされていません。また、私は現在Windows環境での開発に追われているため、Linuxではこれの多くが簡単または不要になる可能性があることにも注意してください。最初のキーは$(call import-module ...)
マクロです。ライブラリプロジェクト内で、ソースファイルとAndroid.mkフォルダーを後で見つけることができる名前付きディレクトリに移動します。私のライブラリプロジェクトディレクトリは次のようになりました。
MyProject
> src
> res
v jni
- Application.mk
v MyLib
- source.cpp
- source.h
- Android.mk
また、プロジェクトを指すようにApplication.mkを編集する必要がありました。
APP_PROJECT_PATH := <path-to-my-project>
APP_BUILD_SCRIPT := $(APP_PROJECT_PATH)/jni/MyProject/Android.mk
./
厄介なことに、これは、ソースファイルにを追加するまで、予期しない方法でAndroid.mkを壊しました。また、リンクのためにインクルードをエクスポートする必要があります。
LOCAL_SRC_FILES := ./source.cpp
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
システムパス変数NDK_MODULE_PATH
がライブラリのJNIディレクトリを含むように設定されていることを確認します<path-to-my-project>/jni
(注:これを行った後、Eclipseを再起動する必要がありました)。
受信側のアプリケーションのAndroid.mkファイル(アプリにネイティブにリンクするファイル)で、モジュールをインポートします。
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := MyNativeProject
LOCAL_SRC_FILES := source.cpp
LOCAL_CFLAGS := -DANDROID_NDK -g -std=c99
LOCAL_SHARED_LIBRARIES := MyLib
include $(BUILD_SHARED_LIBRARY)
$(call import-module,android/native_app_glue)
$(call import-module, IntelLog)
この時点ですべてが完全に構築されましたが、APKパッケージャーは生成された.soバイナリが2回含まれることを好みませんでした(1回はLibraryプロジェクトの自然なインポートプロセスから、もう1回はimport-module
呼び出しから)。これを解決するには、ライブラリをクリーンアップし、再度ビルドしないでください。呼び出しによってimport-module
.soがビルドされ、プロジェクトにインポートされます。(明らかに、プロジェクトでJava APIのみが必要な場合は、その.soファイルをビルドする必要があります)。おめでとう!ハイブリッドネイティブ/Javaライブラリを使用した機能的な(単純ではないにしても)ビルドプロセスがあります