Как мне собрать несколько платформ Android (и, возможно, ABI), используя vs-android? - PullRequest
0 голосов
/ 27 июля 2011

Я портирую нативный движок C ++ на Android NDK. Попробовав некоторые среды и инструменты, я обнаружил, что последняя версия vs-android (0.9) наиболее удобна. У меня есть несколько проблем с ним (некоторые мне, возможно, придется задать в будущих вопросах), но сейчас - вот одна:

Собственный движок компилируется в собственную разделяемую библиотеку. Мы хотим, чтобы движок был совместимым с Android-8 API (Android 2.2).

У нас есть несколько приложений для тестирования, которые мы используем внутри компании. Я также перенес один из них на Android, но, поскольку я использую нативную активность (и к тому же нативный клей приложения), для нее требуется android-9 (2.3).

У меня есть несколько проектов модулей - статических библиотек - которые используются как в движке, так и в приложении для тестирования. Они нужны мне для компиляции Android-8 для двигателя и Android-9 для тестера. В дополнение ко всему, мы хотим поддерживать и arm5, и arm7.

С помощью скриптов сборки ndk я могу сделать это довольно легко. В MS-Build (который использует vs-android), кажется, требуется экспоненциальное количество конфигураций (не забудьте о debug / profile / release).

Есть ли способ сделать это, не создавая все эти конфигурации? Например, когда я собираю свой движок, он скомпилирует модули для android-8 и для arm5 и arm7, а когда я соберу тестер, он скомпилирует модули для android-9 и для arm5 и arm7 без создание 4 практически идентичных конфигураций для каждого проекта и для отладки, профиля, выпуска?

Я нашел это , но я не уверен, как его использовать и можно ли здесь применить технику родительских / дочерних проектов.

(Говорить мне: «Перестаньте быть ленивым и просто создавать конфигурации, несмотря на тот факт, что когда вы захотите изменить параметр, вам придется изменять его во всех конфигурациях», это приемлемо в качестве комментария, но, пожалуйста, не как ответ. То же самое касается «использовать ndk-build и вручную собрать ваш apk вместо использования vs-android»).

Спасибо!

(Кстати, кто-нибудь может добавить тег vs-android?)

EDIT: Я придумал частичное решение - только вопрос уровня API. Смотрите мой ответ ниже.

1 Ответ

0 голосов
/ 31 июля 2011

ОК, вот частичное решение, которое я нашел (так как никто не придумал другого ответа).

Это касается проблемы уровня API.Это также будет работать для всего, что зависит от решения.Специально для моей проблемы - для каждого проекта (все статические библиотеки, библиотека общего доступа для движка и библиотека общего доступа для тестера) я добавил следующее в файл проекта:

  <Import Condition="Exists('$(SolutionDir)AndroidSolution.props')" Project="$(SolutionDir)AndroidSolution.props" />

И затем каждое решение может определитьпараметры, необходимые для всех своих проектов, добавив файл «AndroidSolution.props» в ту же папку, что и файл решения.Пример файла реквизита:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <AndroidAPILevel>android-8</AndroidAPILevel>
    <!-- <AndroidArch>armv7-a</AndroidArch> -->
  </PropertyGroup>
</Project>

Таким образом, уровень API определяется для всех проектов в решении, и они могут изменяться для разных решений.

Что касается нескольких ABI, ядобавил следующее в XML:

<AndroidArch>__ANDROID_ARCHITECTURE__</AndroidArch>
<PlatformToolset>__PLATFORM_TOOLSET__</PlatformToolset>

и использовал короткий скрипт (который вызывается несколько раз перед каждым выполнением msbuild), чтобы заменить оба параметра в скрипте сборки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...