Arhn - архитектура программирования

Android NDK — использование библиотек, скомпилированных с другим уровнем API

У меня есть группа библиотек C/C++, скомпилированная с автономным набором инструментов для API 19 и NDK rev 17. Можно ли использовать эти библиотеки в проекте, использующем API 26 (мин. цель SDK 19)? Или мне нужно перекомпилировать их с помощью API 26?

В сценарии make_standalone_toolchain.py запрашивает аргумент --api, но я не уверен, что это должен быть минимальный API или целевой API, используемый в проекте.

29.01.2019

  • Вот как определяется собственная версия платформы при сборке с помощью gradle: Если существует версия платформы для ABI, равная minSdkVersion, ndk-build использует эту версию. В противном случае, если существуют версии платформы ниже minSdkVersion для ABI, ndk-build использует самую высокую из этих версий платформы. Это разумный выбор, поскольку отсутствующая версия платформы обычно означает, что не было никаких изменений в собственных API-интерфейсах платформы по сравнению с предыдущей доступной версией. В противном случае ndk-build использует следующую доступную версию платформы выше, чем minSdkVersion. 29.01.2019
  • Поэтому я не вижу никаких проблем с использованием этих библиотек, если minSdkVersion вашего приложения равно 19 или выше. 29.01.2019
  • @Michael, есть ли какой-либо параметр, который мне нужно установить, кроме указания minSdkVersion и targetSdkVersion в Gradle? 29.01.2019
  • Если вы говорите о том, что вам нужно установить, чтобы контролировать, для какого собственного уровня платформы вы создаете, то minSdkVersion должно быть достаточно. Конечно, есть и другие настройки, такие как targetSdkVersion и compileSdkVersion, но, насколько мне известно, они не влияют на нативный код. 29.01.2019
  • Просто поделитесь этой ссылкой: developer.android.com/ndk/guides/standalone_toolchain 30.01.2019

Ответы:


1

Можно ли использовать эти библиотеки в проекте, который использует API 26 (минимальная цель SDK 19)?

Да, это возможно, но может быть не идеально. Как видно снизу android-ndk-r17c/platforms структура:

введите здесь описание изображения

android-ndk-r17c содержит минимальный уровень API вашего проекта 19, и этот уровень API включает только ДВЕ архитектуры, то есть arm и x86. Это означает, что вся ваша компиляция будет ссылаться и связываться с этими библиотеками внутри arch-arm или arch-x86 соответственно. И обратите внимание, что это 32-битные ABI. В будущем, если вам нужно будет включить 64-битные ABI, например. x86_64 или arm64, я думаю, вам нужно перекомпилировать свой собственный код хотя бы с --api 21 (начиная с API 21, NDK начинает поддерживать 64-битные ABI).

Если ваши проекты Android, использующие рассматриваемые собственные общие библиотеки, скомпилированы с помощью minSdkVersion 21 или выше 21, я бы посоветовал вам скомпилировать собственный код с использованием автономных наборов инструментов с --api 21. Потому что нет никакой добавленной стоимости для установки --api 19.

Ссылки:

30.01.2019
  • Неважно, что API 19 не поддерживает 64-битную версию. 64-битные библиотеки могут быть созданы на другом уровне API, чем 32-битные библиотеки. 05.03.2019

  • 2

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

    Единственное, что вам нужно иметь в виду, это то, что самый высокий minSdkVersion — это minSdkVersion для всего приложения. Если у вас есть библиотека, созданная для 19, и библиотека, созданная для 28, самая старая версия Android, на которой будет работать приложение, — 28.

    (Для ясности, это для каждого ABI. Если вы нацелитесь на 21 для 64-разрядной версии и 16 для 32-разрядной версии, 32-разрядное приложение все равно можно будет запустить на 16.)

    05.03.2019
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..