Есть ли преимущество не обновлять целевую платформу NDK? - PullRequest
0 голосов
/ 26 ноября 2018

Я поддерживаю (относительно) старое Android-приложение, которое использует встроенную библиотеку NDK для некоторых функций.Первоначально он был построен для платформы NDK 9-го уровня.

Я пытался модернизировать инфраструктуру сборки, и в связи с этим я использую обновленные выпуски SDK и NDK, в которых отсутствует поддержка платформы NDK 9 (минимальная версия теперь 16).

Есть ли какое-либо преимущество в , а не обновлении целевого NDK, против которого мы строим, и / или в том, что оно не обновляется до последнего уровня платформы NDK (в настоящее время 28), илиВсегда ли полезно обновлять уровень целевой платформы NDK при выпуске нового NDK?

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Единственным недостатком повышения уровня API NDK является то, что он эквивалентен вашему minSdkVersion.Если вы увеличиваете minSdkVersion, вы отказываетесь от поддержки старых устройств.

Сам NDK прекращает поддержку уровней API только тогда, когда у них тривиальное число пользователей.Уровни API 16 и выше составляют более 99% всех пользователей.Если по какой-либо причине в числе пользователей вашего приложения значится большое количество пользователей Gingerbread или ICS, вам придется придерживаться более старого NDK, чтобы продолжать поддерживать эти устройства.

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

Правильный уровень API будет зависеть от приложения (хотя забавно, что есть твиттер-аккаунт , который дает разумное предложение ).Проверьте свои показатели использования и посмотрите, где находятся ваши пользователи, и сопоставьте их с трудностями, связанными с поддержкой старых версий.Если ваше приложение является чем-то вроде игры с высокой точностью, скорее всего, устройства Jelly Bean не смогут запустить ваше приложение с какой-либо разумной производительностью в любом случае, поэтому поддерживать эти устройства нет смысла.

0 голосов
/ 26 ноября 2018

Вероятно, использование «правильной» версии NDK - лучший выбор, а не использование слишком старой версии NDK.Одним из преимуществ использования версии NDK «ловить время» является адаптация к изменениям Android ABI , а также улучшения для изменений компилятора наряду с развитием версии Android API.Например,

  • GCC больше не поддерживается.Он удален в NDK r18.
  • Удалена поддержка ARMv5 (armeabi), MIPS и MIPS64.Попытка построить любой из этих ABI приведет к ошибке, начиная с r17.

Кроме того, почти всегда есть некоторые исправления ошибок и улучшения безопасности для каждой новой ревизии.Лично я не думаю, что есть большая добавленная ценность для того, чтобы придерживаться старой версии NDK.

Есть ли преимущество в не обновлении целевого NDK, который мы строим против

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

Вы можете проверить примечания к выпуску NDK, чтобы понять его развитие.https://developer.android.com/ndk/downloads/revision_history

Что касается вашего беспокойства об armeabi-v7a, вот как оно официально заявлено https://developer.android.com/ndk/guides/abis#v7a.


- Редактировать -

Чтобы уточнить несколько вещей:

  • NDK ревизия: каждая ревизия обычно добавляет / удаляет функции и поддерживаемые платформы.В настоящее время последняя версия - r18b .По сравнению с r16b он удаляет платформы android-14 и android-15 .

  • minSdkVersion: установить свойство minSdkVersionв блоках defaultConfig или productFlavors вашего файла build.gradle уровня модуля.Это гарантирует, что ваша библиотека используется только приложениями, установленными на устройствах с адекватной версией Android.

  • ANDROID_PLATFORM Переменная CMake: эта переменная используется для указания имени целевого AndroidПлатформа.Например, android-18 указывает Android 4.3 (уровень API 18).У вас есть ДВА опции для настройки платформы Android, для которой вы строите, одна - это переменная CMake, другая - miniSdkVersion.Также обратите внимание, что у CMake есть своя собственная логика выбора версии платформы best , НЕ обязательно равной указанной minSdkVersion.

    1. Если существует версия платформы для ABI, равная minSdkVersion, CMake использует эту версию.
    2. В противном случае, если существуют версии платформы ниже, чем minSdkVersionдля ABI CMake использует самую высокую из этих версий платформы.Это разумный выбор, потому что отсутствующая версия платформы обычно означает, что с предыдущей доступной версии не было никаких изменений в API нативной платформы.
    3. В противном случае, CMake использует следующую доступную версию платформы выше minSdkVersion.

Итак, когда вы обновляете вашу версию NDK и дважды проверяете, что ваша необходимая платформа Android существует в каталоге платформ NDK, например, android-ndk-r16b/platforms,

Рекомендации: https://developer.android.com/ndk/guides/cmake

...