#android #android-ndk
#Android #android-ndk
Вопрос:
В моем приложении для Android у меня есть довольно много проектов на C с открытым исходным кодом, которые создаются как статические библиотеки. По сути, Android.mk создает все библиотеки как статические и связывает их все для создания моего окончательного core.so библиотека.
Наша ночная сборка проверяет все файлы из системы управления версиями в чистом каталоге и создает все, что необходимо.
Я смотрю, как я могу оптимизировать нашу ночную сборку. Поскольку сторонний код не меняется (может быть, раз в шесть месяцев), я хотел бы создать их только один раз и проверить сгенерированные библиотеки. Я предполагаю, что эти библиотеки будут иметь расширение «.a». Ночная сборка просто проверит эти библиотеки и свяжет их, чтобы создать мой окончательный core.so .
В принципе, я надеюсь, что смогу сломать существующие Android.mk на две разные — одну для создания статических библиотек и одну для создания окончательной разделяемой библиотеки, которую может использовать код Android.
Мне интересно, возможно ли это. С уважением.
Ответ №1:
Вы ищете поддержку готовых библиотек.
Предполагая, что ваше объявление статической библиотеки выглядит примерно так:
include $(CLEAR_VARS)
LOCAL_MODULE := foo
LOCAL_SRC_FILES := foo/foo.c
LOCAL_EXPORT_CFLAGS := -DFOO=1
include $(BUILD_STATIC_LIBRARY)
вместо этого вы можете использовать предварительно созданную:
include $(CLEAR_VARS)
LOCAL_MODULE := foo
LOCAL_SRC_FILES := libs/foo.a
include $(PREBUILT_STATIC_LIBRARY)
и включить в свою основную библиотеку то же самое:
include $(CLEAR_VARS)
LOCAL_MODULE := myCore
LOCAL_SRC_FILES := core/core.c
LOCAL_STATIC_LIBRARIES := foo
include $(BUILD_SHARED_LIBRARY)
Таким образом, у вас может быть отдельный Android.mk или просто используйте условную переменную.
ifeq ($(USE_PREBUILT_LIBS),)
# declare with BUILD_STATIC_LIBRARY
else
# declare with PREBUILT_STATIC_LIBRARY
endif
Комментарии:
1. Спасибо за вашу помощь. Как запустить создание готовых статических библиотек? В каком каталоге хранятся готовые статические библиотеки?
2. Суть готовой библиотеки в том, что вы создаете ее так, как хотите, и сохраняете ее там, где хотите (отсюда ваша ссылка на проверку их самостоятельно). Похоже, вы хотели использовать
.a
s из вашего текущего процесса сборки?