Как включить общий модуль в 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, он присваивает независимое значение каждому модулю.

Другие вопросы по тегам