名前が示すように、ビルド済みのライブラリはビルドされません(すでにビルドされています)。ビルド済みのライブラリを再度ビルドする必要がある場合は、ソースを含め、Android.mkを変更して、BUILD_SHARED_LIBRARYを使用してそれらのソースを使用してモジュールを再ビルドする必要があります。ただし、ライブラリソースツリー全体をlibs
フォルダに含め、そのAndroid.mkをフォルダに含めることができます。
追加するライブラリは、ソースが変更された場合にのみ構築され、他のモジュールの変更による影響を受けないことに注意してください。
基本的な例は次のとおりです。
まず、プロジェクトのレイアウト。3つのモジュールがあります:
- ver:これはライブラリです:libver.so。ソースが含まれています。ndk-buildの一部として構築されました
- magic:これはビルド済みのライブラリです:libmagic.so
- getver:実行可能ファイルが構築されています
ファイルレイアウト:
sdk@AndroidDev:~/ndk/sources/getver$ find jni/
jni/
jni/getver.c
jni/libs
jni/libs/libver
jni/libs/libver/compiled_ver.c
jni/libs/libver/Android.mk
jni/libs/libver/ver.h
jni/libs/libmagic.so
jni/libs/Android.mk
jni/Android.mk
次に、トップレベルのAndroid.mk(jni /にあります):
sdk@AndroidDev:~/ndk/sources/getver$ cat jni/Android.mk
LOCAL_PATH := $(call my-dir)
my_LOCAL_PATH := $(LOCAL_PATH)
# Include all libs (built and prebuilt)
include $(LOCAL_PATH)/libs/Android.mk
# Build my executable
LOCAL_PATH := $(my_LOCAL_PATH)
include $(CLEAR_VARS)
LOCAL_MODULE := getver
LOCAL_SRC_FILES := getver.c
LOCAL_SHARED_LIBRARIES= ver magic
include $(BUILD_EXECUTABLE)
jni / libs / Android.mk、すべてのライブラリを含めるため:
sdk@AndroidDev:~/ndk/sources/getver$ cat jni/libs/Android.mk
LOCAL_PATH := $(call my-dir)
# Prebuilt Lib
include $(CLEAR_VARS)
LOCAL_MODULE := magic
LOCAL_SRC_FILES := libmagic.so
include $(PREBUILT_SHARED_LIBRARY)
# Lib to be built as part of building process.
include $(CLEAR_VARS)
include $(LOCAL_PATH)/libver/Android.mk
最後に、libver.soのAndroid.mk(jni / libs / libver / Android.mk):
sdk@AndroidDev:~/ndk/sources/getver$ cat jni/libs/libver/Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ver
LOCAL_HDR_FILES := ver.h
LOCAL_SRC_FILES := compiled_ver.c
include $(BUILD_SHARED_LIBRARY)
上記の例では、libmagic.soはビルド済みのライブラリであるため、ビルドされることはありません。ただし、libver.soは、libverソースが変更されるたびにビルドされます。getverソースが変更された場合、再構築されません。以下の例(タッチコマンドを使用してgetver.cソースの変更をシミュレートします):
初めてのビルド:
sdk@AndroidDev:~/ndk/sources/getver$ ../../ndk-build
Gdbserver : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver
Gdbsetup : libs/armeabi/gdb.setup
Compile thumb : getver <= getver.c
Compile thumb : ver <= compiled_ver.c
SharedLibrary : libver.so
Executable : getver
Install : getver => libs/armeabi/getver
Prebuilt : libmagic.so <= jni/libs/
Install : libmagic.so => libs/armeabi/libmagic.so
Install : libver.so => libs/armeabi/libver.so
getverモジュールソースの編集をシミュレートします。
sdk@AndroidDev:~/ndk/sources/getver$ touch jni/getver.c
再構築(libver.soは再構築されないことに注意してください):
sdk@AndroidDev:~/ndk/sources/getver$ ../../ndk-build
Gdbserver : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver
Gdbsetup : libs/armeabi/gdb.setup
Compile thumb : getver <= getver.c
Executable : getver
Install : getver => libs/armeabi/getver
Install : libmagic.so => libs/armeabi/libmagic.so
Install : libver.so => libs/armeabi/libver.so
libver.soソースの編集をシミュレートします
sdk@AndroidDev:~/ndk/sources/getver$ touch jni/libs/libver/compiled_ver.c
Rebuild(libver.soに依存するため、getverが再構築されることに注意してください。
sdk@AndroidDev:~/ndk/sources/getver$ ../../ndk-build
Gdbserver : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver
Gdbsetup : libs/armeabi/gdb.setup
Compile thumb : ver <= compiled_ver.c
SharedLibrary : libver.so
Executable : getver
Install : getver => libs/armeabi/getver
Install : libmagic.so => libs/armeabi/libmagic.so
Install : libver.so => libs/armeabi/libver.so