Android NDK — как создать статические библиотеки только один раз?

#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 из вашего текущего процесса сборки?