Вопрос по c, c++, android – Могу ли я использовать нативные библиотеки (установленные в стеке Android) в моем приложении NDK?

2

из этой статьи

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 ?

Ваш Ответ

1   ответ
2

Ответ на оба вопроса: да, вы можете.

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. Если вы застряли где-то, дайте мне знать. Спасибо

Error: User Rate Limit Exceeded Jeegar Patel
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededstackoverflow.com/questions/39853702/…
Error: User Rate Limit Exceeded

Похожие вопросы