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 Модуль проекта, чтобы избежать слишком много раз перестроить. Или вы можете просто позволить другим вашим проектам зависеть от типа релиза, так что он будет построен только ОДИН РАЗ.
1

Другие решения

Других решений пока нет …