Как использовать родной код Android внутри проекта приложения

У меня есть требование, где мне нужно получить доступ к нативному коду (внутри Android OS) и использовать его в моем приложении через интерфейс jni.

Например: доступ void NuPlayer::HTTPLiveSource::start() {..} метод внутри
HttpLiveSource.cpp.

Я узнал от Android — Включите встроенные функции StageFright в мой собственный проект что это возможно, используя два варианта:

  1. Создайте свой проект, используя дерево с полным исходным кодом Android.
  2. Вы можете просто скопировать включаемый файл в свой проект

Я не могу использовать вариант 1 и поэтому пытаюсь использовать вариант 2 … Я новичок в jni и поэтому хочу знать:

  • Какие файлы включить в мой проект?
  • Как получить доступ к нативным методам?
  • Это перспективный подход? (Я видел, что исходные файлы перемещаются в разные папки в зависимости от версии ОС)

Любые указатели или подробные объяснения будут очень полезны.

1

Решение

Какие файлы включить в мой проект?

Это зависит от вашего проекта. Обычно вы можете использовать инкрементный подход: когда ваш компилятор жалуется на отсутствие включений, переходите к исходному тексту Google и клонируйте соответствующий фрагмент их Git-репозитория. Но также можно загрузить полное дерево AOSP.

Обратите внимание, что вам понадобятся общие библиотеки не-NDK, чтобы связать ваш .so на заключительном этапе. Самый простой способ — вытащить все библиотеки из /system/lib с вашего целевого устройства. Но вы можете использовать эмулятор, если хотите.

Как получить доступ к нативным методам?

Вы должны создать свою общую библиотеку оболочки для исходного кода, которая использует JNI для взаимодействия с вашим Java-приложением. Иногда это тонкий слой, который в сущности предоставляет все базовые методы в их полной красоте Java. Но предпочтительнее объединить собственный доступ (в конце концов, каждый обход JNI имеет свои накладные расходы) и создать высокоуровневый простой в использовании класс JNI, который позаботится о собственных объектах, потоках, имени пользователя -Это.

Это перспективный подход? (Я видел, что исходные файлы перемещаются в разные папки в зависимости от версии ОС)

Нет, это не гарантирует 100% работу в будущем или даже на одном из устройств, которые вы явно не тестировали. Это верно не только для использования нативного кода, но и для недокументированных API Java. OTOH, изменения, такие как перемещение исходных файлов в разные папки (например, то, что произошло в 4.2 для stagefright), не обязательно приводят к несовместимости.

Я новичок в Jni

Я бы сказал, что работа с системными библиотеками требует не только базового понимания JNI и Android NDK. Я настоятельно рекомендую изучить http://www.apress.com/9781430248279 или подобные книги, прежде чем погрузиться в него.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]