Android обнаруживает процессор Atom во время выполнения, чтобы выбрать правильную скомпилированную библиотеку NDK?

В будущем многие Android-устройства будут использовать процессор Atom. Это означает, что при создании приложения, которое можно развернуть на устройстве с процессором Atom, необходимо будет включить собственную библиотеку для атома, а также для процессора x86. Итак, мой вопрос: как определить, какой процессор находится на устройстве, прежде чем решить, какую нативную библиотеку загрузить? Каков наилучший способ выбрать, какую библиотеку загрузить?


person Code Droid    schedule 10.04.2012    source источник


Ответы (1)


Вам не нужно ничего декодировать вручную. Просто создайте свою библиотеку, ориентированную на x86, указав правильный APP_ABI в файле Application.mk (прочитайте файл docs\Application-mk.html из дистрибутива ndk):

APP_ABI := armeabi armeabi-v7a x86

Используя это, вы получите три библиотеки в папке libs. Android автоматически выберет правильный во время выполнения.

Если вам нужно обнаружить во время выполнения, вы можете использовать библиотеку cpufeatures, которая распространяется с NDK. Он обеспечивает следующую функцию:

typedef enum {
    ANDROID_CPU_FAMILY_UNKNOWN = 0,
    ANDROID_CPU_FAMILY_ARM,
    ANDROID_CPU_FAMILY_X86,
    ANDROID_CPU_FAMILY_MAX  /* do not remove */
} AndroidCpuFamily;

/* Return family of the device's CPU */
extern AndroidCpuFamily   android_getCpuFamily(void);

Если вам нужно выполнить те же функции на стороне Java, вы должны прочитать файл /proc/cpuinfo и проанализировать его содержимое.

person Mārtiņš Možeiko    schedule 10.04.2012
comment
мой класс приложения выполняет staticstatic { System.loadLibrary(mylibrary-jni); } где mylibrary-jni — имя файла библиотеки. Не знаете, как запросить загрузку библиотеки на основе каталога. - person Code Droid; 10.04.2012
comment
Пожалуйста, напишите, как бы вы запросили загрузку библиотеки, чтобы ее забрали. И как armeabi armeabi-v7a x86 указывает включение процессора Atom? - person Code Droid; 10.04.2012
comment
Это все, что вы должны сделать на стороне java - просто вызовите loadLibrary. Он автоматически выберет правильную библиотеку в папке libs. - person Mārtiņš Možeiko; 10.04.2012
comment
x86 означает, что он будет компилироваться для Atom. Я думаю, что Android официально поддерживает Atom как минимальное требование для x86. - person Mārtiņš Možeiko; 10.04.2012
comment
Ну, я добавил настройки APP_API, как описано, но получил только один файл библиотеки. - person Code Droid; 11.04.2012
comment
APP_ABI, а не API. И вы уверены, что добавили файл Application.mk, а не Android.mk? - person Mārtiņš Možeiko; 11.04.2012
comment
Да, ставлю как APP_ABI. Он находится в файле Android.mk, а не в файле Application.mk. - person Code Droid; 11.04.2012