Android NDK - кои android архитектури да включите в Application.mk?

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

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

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

  • arm64-v8a
  • армеаби
  • armeabi-v7a
  • mips
  • mips64
  • x86
  • x86_64

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

Проблемът ми е, че разработих крос-платформен двигател (Windows, Linux и OSX) и със статичното свързване получавам размер от около 2,5MB на всеки поддържана платформа. Не знам за двоичния формат на Android (ELF?), но предполагам, че ще завърши с приблизително същия размер.

Това означава, че ако успея да преобразувам библиотеката си в Android, ще се окажа с около (7 * 2,5) = 17,5 MB двоични файлове, покриващи всички архитектури.

Наистина е необходимо да се изгради за всички архитектури с 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 (‹= просто се смея на вашето невежество) ... bg .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 са базирани на ръка, така че винаги можете да потърсите спецификациите на процесора на устройството, за да включите библиотеки за поддръжка според нуждите. Така че предполагам, че armeabi-v7a и x86 ми се струват достатъчни .CPU на Samsung Galaxy Tab 3 е x86. - person Kirtan; 05.11.2014