Как включить общий модуль в 2 разных приложения (Android)
Мне нужна небольшая помощь с make-файлами Android.
Есть один общий модуль для 2 моих приложений. Я планировал иметь make-файл для общего модуляcommon.mk
и включить его в оба моих приложения.
Как это:
app1:
=====
main.c
Android.mk
...
...
include ../common/common.mk
LOCAL_MODULE := app1
...
...
app2:
=====
main.c
Android.mk
...
...
include ../common/common.mk
LOCAL_MODULE := app2
...
...
common:
=======
common.mk
common.c
когда я строю из корневого каталога, используя make app2
Я получаю несколько ошибок определения для всех функций, кроме общего модуля.
Я пришел к выводу, что common.mk включается дважды, пока система сборки Android ищет правильную цель (app2 в моем случае). Вот почему проблема возникает.
Теперь, как мне это контролировать? Что является стандартным способом в Android?
2 ответа
Правильный способ должен состоять в том, чтобы создать общую библиотеку (общую или статическую), используя BUILD_SHARED_LIBRARY
или же BUILD_STATIC_LIBRARY
цели.
А затем добавить их в app1
а также app2
просто используйте LOCAL_STATIC_LIBRARIES
или же LOCAL_SHARED_LIBRARIES
создать зависимость между app1
, app2
а также common
,
Проверьте синтаксис файла Android.mk для получения дополнительной информации:
BUILD_SHARED_LIBRARY
Указывает на скрипт сборки, который собирает всю информацию о модуле, который вы указали в переменных LOCAL_XXX, и определяет, как создать целевую общую библиотеку из перечисленных вами источников. Обратите внимание, что вы должны определить LOCAL_MODULE и LOCAL_SRC_FILES как минимум, прежде чем включать этот файл.
Пример использования:
include $(BUILD_SHARED_LIBRARY)
Обратите внимание, что при этом будет создан файл с именем lib $ (LOCAL_MODULE).so
BUILD_STATIC_LIBRARY
Вариант BUILD_SHARED_LIBRARY, который вместо этого используется для создания целевой статической библиотеки. Статические библиотеки не копируются в ваш проект / пакеты, но могут использоваться для создания общих библиотек (см. LOCAL_STATIC_LIBRARIES и LOCAL_WHOLE_STATIC_LIBRARIES, описанные ниже).
Пример использования:
include $(BUILD_STATIC_LIBRARY)
Обратите внимание, что при этом будет создан файл с именем lib $ (LOCAL_MODULE).a
LOCAL_STATIC_LIBRARIES
Список модулей статических библиотек (собранных с помощью BUILD_STATIC_LIBRARY), которые должны быть связаны с этим модулем. Это имеет смысл только в модулях разделяемой библиотеки.
LOCAL_SHARED_LIBRARIES
Список модулей общих библиотек, от которых зависит этот модуль во время выполнения. Это необходимо во время ссылки и для вставки соответствующей информации в сгенерированный файл.
В common.mk переменная, которую вы используете для назначения файлов C, использует:= вместо +=.
Каждый раз, когда вызывается common.mk, он присваивает независимое значение каждому модулю.