OK、あなたの編集が表示されました。これにより、特定の質問に答えることができます。
Android NDK を使用してネイティブ ライブラリをビルドする場合は、アプリケーション用に少なくとも 1 つのファイルが必要です。Android.mk
ただし、これは必須ではありません。Cmake、「従来の」makefile を使用した「スタンドアロン ツールチェーン」、MS Visual Studio プラグイン、またはその他の方法でビルドしても問題ありません。重要なのは結果です。その結果、バイオニック ランタイム用の互換性のあるコンパイラで構築された共有オブジェクトが作成されます。
ライブラリを${project_root}/libs/armeabi/
ディレクトリ (ARM v6 互換デバイスの場合、x86、MIPS、arm v7a の場合はその他のサブディレクトリ) に配置して、APK ビルダーがライブラリを正しくパックできるようにし、アプリ インストーラーが正しいバージョン (デバイスと互換性のある) をアンパックできるようにすることは理にかなっています。プロセッサ) を/data/data/${package_name}/lib
デバイス上のディレクトリに配置し、最終的にSystem.loadLibrary(short_name)
Java から使用できるようにします。ただし、ファイルを別の方法でパックし、so
手動でアンパックして、デバイス ファイル システムの任意の場所からロードすることも可能です (アプリにこのファイルの書き込みと読み取りのアクセス許可がある場合)。
しかし、特殊なケースを除外する場合、ディレクトリに Android.mk を配置する方がはるかに快適${project_root}/jni
です。コマンドに関してはndk-build
、各ライブラリは個別の MODULE ですが、3 つすべてを 1 つの Android.mk ファイルで定義できます。一方、ライブラリが分離されている場合 (たとえば、別のサード パーティから提供されている場合)、おそらく 3 つの Android.mk ファイルを作成することをお勧めします。幸いなことに、ndk-build
gnu make のラッパーにすぎず、include
Android.mk の単純なステートメントは他の makefile と同じように機能します。
要約すると、あなたのケースはおそらく単純なApplications/MyApplication/ [Application]/jni/Android.mk
ファイルでカバーされています。
include ../../Libraries/libOne/Android.mk
include ../../Libraries/libTwo/Android.mk
include ../../Libraries/libThree/Android.mk
libOne と libTwo の間にどのような依存関係があるかはわかりませんが、libOne の場合、ファイルは次のLibraries/libOne/Android.mk
ようになります
LOCAL_PATH = $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libOne
LOCAL_SRC_FILES := first.c
include $(BUILD_STATIC_LIBRARY)
とLibraries/libThree/Android.mk
LOCAL_PATH = $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libThree
LOCAL_SRC_FILES := third.c
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../libOne $(LOCAL_PATH)/../libTwo
LOCAL_STATIC_LIBRARIES := libOne libTwo
include $(BUILD_SHARED_LIBRARY)
コマンドプロンプトから、またはEclipse ADTプラグインを介して、ディレクトリndk-build
から実行する必要があります。Applications/MyApplication/ [Application]
同じ更新は、ディレクトリ内の 1 つのAndroid.mk
ファイルで表すことができます。jni
LOCAL_PATH = ../../Libraries/libOne
include $(CLEAR_VARS)
LOCAL_MODULE := libOne
LOCAL_SRC_FILES := first.c
include $(BUILD_STATIC_LIBRARY)
LOCAL_PATH = ../../Libraries/libThree
include $(CLEAR_VARS)
LOCAL_MODULE := libThree
LOCAL_SRC_FILES := third.c
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../libOne $(LOCAL_PATH)/../libTwo
LOCAL_STATIC_LIBRARIES := libOne libTwo
include $(BUILD_SHARED_LIBRARY)