У меня есть требование, где мне нужно получить доступ к нативному коду (внутри Android OS) и использовать его в моем приложении через интерфейс jni.
Например: доступ void NuPlayer::HTTPLiveSource::start() {..}
метод внутри
HttpLiveSource.cpp.
Я узнал от Android — Включите встроенные функции StageFright в мой собственный проект что это возможно, используя два варианта:
Я не могу использовать вариант 1 и поэтому пытаюсь использовать вариант 2 … Я новичок в jni и поэтому хочу знать:
Любые указатели или подробные объяснения будут очень полезны.
Какие файлы включить в мой проект?
Это зависит от вашего проекта. Обычно вы можете использовать инкрементный подход: когда ваш компилятор жалуется на отсутствие включений, переходите к исходному тексту 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 или подобные книги, прежде чем погрузиться в него.
Других решений пока нет …