Android NDK — какие архитектуры Android включить в Application.mk?

Недавно я начал играть с NDK, надеясь преобразовать свою библиотеку в Android. Моя проблема заключается в количестве двоичных файлов для каждой архитектуры, чем создается после успешной ndk-сборки Моя версия NDK — это r10c и сборка простой приложение (исполняемое), например следующее:

#include "stdio.h"
int main() {
   printf("hello from Windows Mr. Android!!");
   return 0;
}

создает 7 папок архитектуры для двоичных файлов в папках /libs, а именно:

  • arm64-v8a
  • армеаби
  • armeabi-v7a
  • мипс
  • мипс64
  • x86
  • x86_64

Двоичные файлы занимают в среднем от 6 до 10 КБ, но все вместе занимает около 64 КБ (размер диска).

Моя проблема в том, что я разработал кросс-платформенный движок (Windows, Linux и OSX), и со статической привязкой я получаю размер около 2,5 МБ на каждом поддерживается платформа. Я не знаю о двоичном формате Android (ELF?), но я предполагаю, что он закончится примерно таким же размером.

Это означает, что если мне удастся преобразовать мою библиотеку в Android, я получу около (7 * 2,5) = 17,5 МБ двоичных файлов, охватывающих все архитектуры.

Неужели нужно собрать для всех архитектур с APP_ABI := all и просто забыть? Android выбирает правильную версию при выполнении? Является ли это стандартным способом сборки для Android и уверенности, что все Android будут поддерживаться?

Дополнительный вопрос:

Я использую Android на VirtualBox и подключаюсь к общей папке своей ОС, но мой Android показывает двоичные файлы со знаком вопроса и спрашивает, как их открыть. Требуется ли для правильного выполнения какая-то связка, как в OSX? TX


person Community    schedule 05.11.2014    source источник
comment
вы также можете создать разные APK для каждого ABI developer.android.com/ google/play/publishing/multiple-apks.html   -  person Selvin    schedule 05.11.2014
comment
@Selvin, спасибо за ссылку, точно описывает :)   -  person    schedule 05.11.2014


Ответы (1)


Это зависит от того, какие устройства вы используете для большинства мобильных телефонов Android в настоящее время.

armeabi-7a

Если вы намерены запустить свое приложение на Genymotion, например, на эмуляторе, добавьте двоичный файл x86.

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

поэтому вы можете указать в Application.mk, как показано ниже, если хотите настроить таргетинг на большинство мобильных телефонов Android.

APP_ABI := armeabi-v7a,x86
person Kirtan    schedule 05.11.2014
comment
так что Samsung Galaxy 3 — это genymotion (‹= я просто смеюсь над вашим невежеством)… en .wikipedia.org/wiki/Samsung_Galaxy_Tab_3_10.1 полно реальных устройств с архитектурой x86... - person Selvin; 05.11.2014
comment
Спасибо за ответ. Ну, моя проблема в том, что у меня нет никаких целей. Я просто хочу поддерживать Android в целом. Итак, я собираюсь следовать armeabi-v7a,x86 для начала :) Просто потому, что я полный нуб в Android, как именно это работает? Я собираюсь создать один APK со всеми двоичными файлами архитектуры или несколькими? - person ; 05.11.2014
comment
я не хочу сказать, что genymotion - это только x86, но большинство устройств Android основаны на ARM, поэтому вы всегда можете найти спецификации процессора устройства, чтобы включить библиотеки для его поддержки в соответствии с потребностями. поэтому я думаю, что armeabi-v7a и x86 мне кажется достаточно Процессор Samsung Galaxy Tab 3 — x86. - person Kirtan; 05.11.2014