Можно ли использовать приложения Android (с использованием библиотек, собранных из NDK) на платформе x86 и ARM? - PullRequest
0 голосов
/ 22 февраля 2012

Я собираюсь создать приложение для Android, в котором я хочу использовать библиотеку C.Итак, я планирую использовать NDK вместе с SDK.NDK поддерживает набор инструкций ARMv5, ARmv7 и x86.Теперь, если я создам приложение Android с использованием ARMv5, оно будет работать на телефонах Android на платформе Intel (x86) (я что-то упустил?)?Если нет, то каким образом я могу создать приложение ANdroid (которое использует некоторые библиотеки C под ним), которое может работать на всех телефонах Android независимо от используемой платформы?

Vibgyor

Ответы [ 3 ]

3 голосов
/ 22 февраля 2012

Вам нужно использовать следующую команду в ndk для сборки .so для архитектуры.

./ndk-build APP_ABI=armeabi armeabi-v7a x86

.so будет присутствовать в соответствующем каталоге и будет получен во время выполнения.

Так что вам нужно собрать свою часть NDK для каждого процессора. Таким образом, в итоге вы получите файл .so для arm, один для x86 (и, возможно, еще один для armv7).

Два / три файла .so объединены в ваш окончательный .apk, и во время установки ОС Android выбирает правильный файл .so для устройства, на котором оно устанавливается.

Так что, если у вас есть Java-часть: она будет работать на всем. Если у вас есть часть NDK: вам нужно будет создать файл .so для каждой платформы ЦП, но они могут / будут объединяться и автоматически выбираться, и пользователь не будет знать, что происходит за кулисами.

0 голосов
/ 04 марта 2014

Некоторые устройства x86, например Samsung Galaxy Tab 2, содержат слой эмуляции руки.Это важно знать, но вы должны следовать советам выше в своей работе.Одна из причин, по которой вам не следует полагаться на эту эмуляцию, если это возможно, заключается в том, что производительность составляет около 40% экономии кода.

0 голосов
/ 03 марта 2014

Лучше всего создать собственную библиотеку для всех платформ (armeabi armeabi-v7a mips и x86), просто установите «all» в переменной APP_ABI.

jni / Application.mk

APP_ABI: = все
APP_PLATFORM: = android-8

В моем случае я использую android-ndk-r9b

Примечание: Если вы развертываете собственные библиотеки на устройствах x86 и MIPS, ваше приложение должно быть ориентировано на Android 2.3 (уровень API 9) или новее.

AndroidManifest.xml

Дополнительная информация: https://developer.android.com/tools/sdk/ndk/index.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...