Я портирую нативный движок 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. Смотрите мой ответ ниже.