Я пытаюсь предварительно скомпилировать статическую библиотеку с помощью Android NDK.Эта предварительно скомпилированная статическая библиотека будет позже связана с кодом JNI в других проектах.У меня нет проекта Eclipse, связанного с библиотекой, поэтому я настроил скелетную структуру каталогов Android JNI в корневом каталоге проекта библиотеки.
Структура каталогов следующая:
<root>/
Android/
jni/
Android.mk
Application.mk
iOS/
<other stuff here>
src/
<a bunch of *.c and *.h files here>
ЭтоApplication.mk
file:
APP_PLATFORM := android-8
APP_ABI := armeabi-v7a
И это Android.mk
file:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := imajilib
LOCAL_CFLAGS := -DANDROID_NDK
MY_FILES := $(wildcard $(LOCAL_PATH)/../../src/*.c)
LOCAL_SRC_FILES := $(MY_FILES:$(LOCAL_PATH)/%=%)
LOCAL_LDLIBS := -lGLESv2 -llog
include $(BUILD_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := ignore_this_imajilib
LOCAL_STATIC_LIBRARIES := imajilib
include $(BUILD_SHARED_LIBRARY)
Модуль общей библиотеки ignore_this_imajilib
- это трюк зависимостей, который я выбрал из здесь .
Я скомпилирую библиотеку, перейдя в каталог jni/
и выполнив следующую команду:
~/path/to/ndk-build NDK_PROJECT_PATH=/path/to/<root> -B V=1
Компиляция прошла без проблем.Теперь у меня есть новые каталоги libs/
и obj/
в каталоге jni/
.
Структура каталога libs/
:
libs/
armeabi-v7a/
libignore_this_imajilib.so
Это нормально, но в идеале ятакже хотелось бы видеть libimajilib.a
здесь.
Структура каталога obj/
:
obj/
local/
armeabi-v7a/
libignore_this_imajilib.so
libimajilib.a
objs/
imajilib/
<this directory is empty>
src/
<a bunch of *.o and *.o.d files>
Проблема в расположении *.o
и *.o.d
файлы.Я подозреваю, что процесс сборки помещает их туда из-за ../../src/*.c
, который у меня есть в файле Android.mk
, и поэтому он собирается obj/local/armeabi-v7a/objs/imajilib/../../src
, тогда как я хотел бы видеть их в obj/local/armeabi-v7a/objs/imajilib
.Я не вижу другого способа, кроме как копировать и вставлять исходные файлы из src/
в каталог jni/
, но я не хочу этого делать, поскольку каталог src/
используется несколькими платформами.