[OK]をクリックすると、編集内容が表示され、特定の質問に答えることができます。あなたのネイティブライブラリ/ IEを構築するには、Android NDKを使用する場合は
あなた必見は、アプリケーションのための少なくとも一つのAndroid.mk
ファイルを持っています。しかし、これは必須条件ではありません。 Cmakeを使ってビルドしても構わないし、「従来の」makefileを使った「スタンドアロンのツールチェーン」やMS Visual Studioのプラグインを使ってビルドすることもできます。それは重要な結果です。その結果、バイオニック・ランタイム用の互換性のあるコンパイラで構築された共有オブジェクトが生成されます。
ライブラリーを${project_root}/libs/armeabi/
ディレクトリー(ARM v6互換装置用、その他のサブディレクトリーはx86、MIPS、アームv7a)に置くとよいでしょう。これは、APKビルダーが正しくパックして、アプリインストーラーが正しいバージョンをアンパックできるようにするためです。 (デバイスプロセッサと互換性があります)をデバイスの/data/data/${package_name}/lib
ディレクトリにコピーし、最後にSystem.loadLibrary(short_name)
を使用してJavaから使用することができます。しかし、so
ファイルを別の方法でパックし、手動で解凍して、デバイスファイルシステム上の任意の場所からロードすることも可能です(このファイルの書き込みと読み取りが許可されている場合)。
しかし、エキゾチックなケースを除外すると、${project_root}/jni
ディレクトリにAndroid.mkを置く方がはるかに快適です。 ndk-build
コマンドに関しては、各ライブラリは別々のモジュールですが、3つすべてを1つのAndroid.mkファイルで定義することができます。一方、ライブラリが分離されている場合(たとえば、別のサードパーティ製の場合)、Android.mkファイルを3つ作成することをお勧めします。幸いなことに、ndk-build
はgnu makeのラッパーにすぎず、Android.mkの単純なinclude
文は他のメークファイルと同様に動作します。要約すると
は、あなたのケースはおそらく、単純な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)
ndk-build
をApplications/MyApplication/ [Application]
ディレクトリから実行する必要があります。コマンドプロンプトまたはEclipse ADTプラグインから実行してください。
同じ
jni
ディレクトリに1つの
Android.mk
ファイルによって表現することができる
更新:
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)
はあなたのAndroid.mkを共有することはできますか?あなたのプロジェクトをどのようにセットアップするかははっきりしていません。 –
@AlexCohn私はまだAndroid.mkが動作していませんが、それは問題です。私は3つのライブラリをすべてビルドして、メインアプリケーションから一緒にリンクする方法を説明した答えを探しています。 –
まだAndroid.mkが動作していないが、まだ動作していないAndroid Mkはありますか? –