Означает ли новое 64-разрядное требование Android новый минимальный уровень API - 21 для приложений с собственным кодом? - PullRequest
0 голосов
/ 04 февраля 2019

Примите во внимание следующее:

  • Обычно разработчики устанавливают значение minSdkVersion равным 16, поскольку оно охватывает более 99% устройств ( 1 ).
  • Однако 1 августа 2019 года Android потребует, чтобы все приложения предлагали 64-битные версии ( 2 ).
  • Кроме того, уровень API NDK (устанавливается с помощью -D__ANDROID_API__) должен быть равен minSdkVersion ( 3 ).
  • Наконец, устройства Android, работающие на arm64-v8a, не поддерживают API уровня ниже 21 ( 4 ).

Я пытался провести исследованиечтобы выяснить, как все это работает - до сих пор я, в основном, пытался разобраться, пытаясь создать зависимости для портирования моей библиотеки C ++ на Android - так что простите, если я что-то упустилочевидно.Но мне кажется, что вышеизложенное указывает на то, что приложения, созданные с помощью Android NDK, должны будут нацеливаться на минимум 21 уровня API, начиная с 1 августа 2019 года. Это правильно?

Ссылки:

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Просто скомпилируйте и включите 64-битные версии тех же 32-битных собственных библиотек, которые есть в apk.Оставьте мин SDK версию, как и раньше.

Если приложение работает с API <21, оно не увидит 64-битные собственные библиотеки и будет работать с 32-битными версиями, как и раньше.В API 21+ устройство может использовать 64-битные библиотеки в зависимости от процессора. </p>

Система сборки Cmake автоматически выберет правильную библиотеку ndk для связи с minSdkVersion в build.gradle, поэтому вам не нужно сильно беспокоиться об установкепроцесс сборки.

Дополнительная информация: https://developer.android.com/ndk/guides/cmake

0 голосов
/ 04 февраля 2019

В процессе моего исследования я думаю Я нашел ответ.Пожалуйста, не стесняйтесь добавлять лучший ответ, если этот ответ неправильный.

Минимальный уровень API 21 для 64-разрядных архитектур обусловлен тем, что Android просто не поддерживал 64-разрядные ранее.Используя условные выражения в ваших сценариях сборки и / или файлах сборки, вы можете указать уровень API 21 для 64-разрядных архитектур и при этом все равно снизить значение до 16 для 32-разрядных.Таким образом, вы будете соответствовать требованиям Google и по-прежнему обеспечивать такую ​​же совместимость, как и раньше.Вот фрагмент из одного из моих собственных сценариев:

case "${ABI}" in
  armeabi-v7a | x86)
    API_LEVEL=16
    ;;
  arm64-v8a | x86_64)
    API_LEVEL=21
    ;;
  *)
    echo >&2 "Invalid ABI ${ABI}"
    exit 1
    ;;
esac
...