Ограниченная версия поддержки Android NDK

Я использовал Android NDK в течение многих лет, однако недавно я увидел сообщение ниже, когда создавал CPP с помощью ndk-build (ndk version 15)

Android NDK: android-9 не поддерживается. Использование минимальной поддерживаемой версии Android-14. Android NDK: ПРЕДУПРЕЖДЕНИЕ: APP_PLATFORM android-14 выше, чем android:minSdkVersion 9

Почему NDK перестает поддерживать уровни Android (3-13) ниже, чем Android-14?

Я попытался выяснить, почему в руководствах NDK, https://developer.android.com/ndk/guides/stable_apis.html, хотя я до сих пор понятия не имею. Кажется, NDK по-прежнему поддерживает уровни выше или равные 3.

Я также предположил, что это может быть вызвано одним из флагов или функций, которые мне нужны в C++. Тем не менее, я не мог найти даже какой-либо подсказки до сих пор.

LOCAL_CPP_FEATURES := rtti exceptions
APP_CPPFLAGS += -std=c++11
APP_STL := gnustl_static

 


person Sung    schedule 15.08.2017    source источник
comment
У Gingerbread невероятно мало активных устройств, и поддержка Gingerbread означает, что такие вещи, как libandroid_support, должны включать больше и, следовательно, больше раздувать APK. Alex и MM S дают хорошие советы о том, как справиться с этим, если вы действительно хотите продолжать поддерживать Gingerbread.   -  person Dan Albert    schedule 16.08.2017


Ответы (2)


Не обновляйте NDK версии 15, если ваши приложения должны работать на Android-9.

Согласно истории изменений NDK (https://developer.android.com/ndk/downloads/revision_history.html),

Android 2.3 (android-9) больше не поддерживается. Минимальный целевой уровень API в NDK теперь — Android 4.0 (android-9). Если ваш APP_PLATFORM установлен ниже, чем android-14, вместо него используется android-14.

person MM S    schedule 15.08.2017

Ваш вопрос «почему» следует адресовать команде NDK. Вы можете задать их в общедоступном списке рассылки или отправить жалобу по адресу GitHub.

В любом случае, на данный момент их вердикт — прекратить поддержку старых устройств. Ожидайте, что следующие выпуски NDK еще больше сократят требования к платформе.

Интересный вопрос, что с этим делать. Если вам важнее android-9, чем android-26, вы можете просто продолжать использовать более раннюю версию NDK. Он не просто перестанет работать. У него нет срока годности.

Обычно Android сохраняет обратную совместимость: если приложение было создано для платформы-X, оно будет работать (возможно, в режиме совместимости) на платформе-(X+n).

С другой стороны, новые выпуски NDK содержат важные исправления ошибок, в том числе исправления безопасности. Новые устройства (например, платформа «O») могут иметь проблемы с запуском двоичных файлов, скомпилированных со старым NDK. И уж точно старый NDK не даст вам доступа к новым функциям, доступным только на продвинутых платформах.

Поэтому может быть целесообразно загрузить два разных APK — один с целевым SDK=9, а другой с минимальным SDK=21 (ваши цифры могут отличаться). Play Store позволяет поддерживать отдельные APK для разных платформ (и ABI). Вы должны быть осторожны только с политикой кода версии, и тогда ваши пользователи будут своевременно получать свои обновления - те, кто застрял на Eclair, и те, кто обновился до Nougat.

person Alex Cohn    schedule 15.08.2017