Android Studio CMake собрать один раз для всех вариантов сборки

У меня есть проект с кодом C++ (JNI) и множеством вариантов сборки и комбинаций. Они используются для реализации различных брендов / вкусов приложения (т. Е. Цвета, стили, значки, ...).

Например, могут быть варианты сборки для n клиентов:

  • customerNDebug
  • customerNDebugproguard
  • customerNRelease,

В любом случае, уровень C/C++ одинаков для каждого продукта.

Обычно CMake в Android Studio компилирует C-код для каждого варианта сборки. Это имеет смысл, если у вас есть варианты сборки типа "debug" а также "release"где результирующий код на самом деле отличается. Однако для вариантов сборки, которые у меня есть, скомпилированный вывод всегда одинаков.

На данный момент компиляция кода C/C++ выполняется с использованием внешнего инструмента в нашем проекте, и я хочу скомпилировать с использованием CMake в Android Studio только для надлежащей поддержки IDE кода C/C++. Так что для меня будет достаточно одной сборки.

Можно ли заставить Android Studio создавать код C/C++ только один раз, независимо от вариантов сборки и разновидностей?

1 ответ

Решение

По умолчанию Android Studio IDE вместе с CMake и Gradle генерирует серию собственных задач сборки, названных с помощью externalNative<BuildVariant>Build в соответствии с вашими типами сборки и вкусами. Если вы хотите исказить это поведение, некоторые обходные пути, как показано ниже:

  1. Создайте проект модуля Android Studio, который собирает только ваш собственный код, например shared-native,
  2. Пусть остальные ваши модули зависят от этого проекта.

Для этого решения необходимо учитывать следующие пункты:

  1. Положить ваши .so файлы в правильном месте, что другие проекты могут видеть и связывать с.
  2. Вы можете включить только debug а также release типы сборки для этого shared-native модульный проект, чтобы избежать слишком много раз перестроить. Или вы можете просто позволить другим вашим проектам зависеть от типа выпуска, чтобы он был собран только ОДИН РАЗ.
Другие вопросы по тегам