Вопрос по c, c++, android – Могу ли я использовать нативные библиотеки (установленные в стеке Android) в моем приложении NDK?
из этой статьи
http://marakana.com/forums/android/examples/49.html
я видел, что сборка приложения с помощью NDK делает следующее
1 & GT; он компилирует весь код c (внутри папки jni) и создает библиотеку, которая остается вlibs
папка
2 & GT; внутри пакета .apk также эта библиотека остается внутриlib
папка
и внутри файла Java я могу загрузить эту библиотеку с помощью следующего кода
<code> static { System.loadLibrary("ndk_demo"); } </code>
Question1: так что теперь возможно, что вместо того, чтобы хранить эту библиотеку как часть .apk, я могу установить ее в системе Android и загрузить приложение из системы?
Question2:
таким же образом я могу использовать некоторые другие библиотеки, все готово установленные в Android, какopen GL
, sqLite
?
Ответ на оба вопроса: да, вы можете.
Q1: Если вы хотите проверить это, вы можете пойти по этому пути.
1) Скомпилируйте исходный код, используя NDK.
2) Скопируйте (adb push) библиотеку в / system / lib вашего устройства Android. Запустите приложение.
Когда вы загружаете библиотеку, она проверяет либо из папки lib файла apk, либо из папки / system / lib системы. Но чтобы скопировать в / system / lib, вы должны перемонтировать файловую систему. Для этого у вас должны быть права суперпользователя.
Q2:
Ответ на вопрос Q1 также. Если библиотека присутствует в / system / lib, вы можете также вызвать существующие библиотеки. Но есть небольшая проблема. Вы не можете вызывать функции внутри библиотеки напрямую из-за соглашения об именах, которому необходимо следовать для интерфейса jni. Так что в конечном итогеyou have to create your own library using the existing library& Quot ;.
Шаги будут такими:
Вытащить библиотеку (adb pull)
Напишите свой собственный код, который будет вызывать подпрограммы из существующей библиотеки (например, OpenGL)
Скомпилируйте ваш код, связав его с готовой библиотекой (см. Файл документации NDK. Как это сделать очень четко написано. Вы должны упомянуть его в файле Android.mk во время компиляции).
Наконец, вы получите разделяемую библиотеку, которая внутри содержит существующую библиотеку.
Я сделал то же самое для одной из существующих библиотек, libsqlite. Если вы застряли где-то, дайте мне знать. Спасибо