Подтвердить что ты не робот

Как настроить множественные архитектуры с помощью NDK?

Фон

Недавно я начал разрабатывать код с использованием NDK, и я подумал о возможной проблеме переносимости, которая может возникнуть при разработке с использованием NDK.

Проблема

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

Возможные решения, которые я нашел до сих пор

Я заметил, что могу изменить файл "jni/Application.mk" и использовать:

APP_ABI: = armeabi armeabi-v7a x86

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

Кроме того, что, если будет неизвестна другая архитектура процессора?

Что произойдет, если я попытаюсь запустить приложение в Google TV, которое, как я помню, вообще не поддерживает NDK?

Другим решением, которое я нашел, является поддержка multi-apk. Однако я не уверен, что понимаю. Означает ли это, что вы создаете тот же APK, каждый раз с другой конфигурацией? Нет специального инструмента автоматизации от ADT, чтобы помочь с этим?

4b9b3361

Ответ 1

Если вы вообще не устанавливаете APP_ABI или используете

APP_ABI := all

в Application.mk, тогда ndk-build будет построена для всех архитектур, поддерживаемых вашей версией NDK. Последний, на сегодняшний день r8d, будет в дополнение к armeabi armeabi-v7a x86 build также для mips. Когда будет выпущена другая архитектура, вы, надеюсь, автоматически получите APK для поддержки.

Когда приложение установлено на устройстве Android, система автоматически выберет подходящую версию ABI и установит правильные разделяемые библиотеки из APK.

Один из недостатков этого подхода заключается в том, что, если родные библиотеки большие, ваш "монолитный" APK файл может стать огромным. Вы можете использовать подход multi-APK, чтобы уменьшить загрузку пользователей. Официальный сайт рекомендует: Обычно вы должны использовать несколько APK для поддержки различных конфигураций устройств только тогда, когда ваш APK слишком велик (более 50 МБ ). Если вы выберете этот маршрут, вам следует внимательно следить за версиями гильдий версии.

К сожалению, нет никаких заслуживающих доверия пророчеств относительно поддержки NDK в Google TV, но, похоже, нет никакого технического обоснования для его нынешней недоступности. Если и когда он придет, ваш ndk-build позаботится об этом автоматически.

ОБНОВЛЕНИЕ Здесь - это простой процесс для поддержания разделенного APK. И, кстати, новый Android TV поддерживает NDK.

Ответ 2

Для последней версии (теперь r9) вы должны указать в "jni/Application.mk"

APP_ABI := all

или

APP_ABI := armeabi armeabi-v7a x86 mips

без./ndk_build будет только строить 'armeabi'