2015-08-29 3 views
0

Я изо всех сил пытаюсь использовать общую библиотеку в приложении для Android.функция вызова из общей библиотеки в приложении для Android

Я загрузил jsqlite shared libs и распаковал их в свой проект в каталог HelloSpatialite/app/src/main/jniLibs. SO сообщения (example) говорят, что это все, что вам нужно сделать в последних версиях Android Studio.

Это мой список каталогов:

HelloSpatialite/приложение/SRC/главная/jniLibs]: персонал Ls -l / .so

-rwxr-хт-х @ 1 пользователь 7778576 16 июня 22:40 armeabi-v7a/libjsqlite.so

-rwxr-хт-х @ 1 пользователь персонал 7782620 16 июня 22:30 armeabi/libjsqlite.so

-rwxr-хт-х @ 1 пользователь персонал 12080476 16 июн 22:51 x86/li bjsqlite.so

Я проверил разделяемая библиотека включена в АПК as in step 3 here.

Однако, сейчас я не в состоянии использовать классы и функции из этой библиотеки.

Если my java code использует import jsqlite.Database;, я получу Error:(6, 15) error: package jsqlite does not exist от Android Studio.

Я стараюсь следовать за android-spatialite tutorial. Пример кода для этого учебника относится к эпохе затмения, а также, кажется, получает пакет jsqlite несколько иначе.

Может кто-нибудь помочь мне попасть на правильный путь здесь?

EDIT: Мой код, минус общие объекты, находится на github.

+0

Как выглядит ваш AndroidManifest.xml? вы добавили '' entries? –

+0

Я попробовал эту '' в моем 'AndroidManifest.xml' локально, но это не имело явной разницы. – fahrradler

+0

В архив, который вы связали, входит только jni libs, но я думаю, вам также понадобится java API jar, чтобы связать их. –

ответ

0

Мне, наконец, удалось это понять.

Поскольку общие библиотеки были уже скомпилированы, я должен был сохранить соответствующее пространство имен java-файлов на package jsqlite;. Реальная проблема тогда заключалась в том, чтобы выяснить, как сохранить эти файлы Java на самом высоком уровне.

Я закончил тем, что модифицировал AndroidManifest.xml для моего модуля, чтобы не иметь обычного «yourcompany.packagename», а вместо этого просто использовал «packagename». Обычным:

<manifest 
    package="com.example.spatialite_database_driver"> 
</manifest> 

становится

<manifest 
    package="spatialite_database_driver"> 
</manifest> 

Я не уверен, если это самый идеальный вариант, но он позволяет мой модуль работать без получения в перекомпиляции кода JNI.

У меня был успешно использован этот модуль здесь: https://github.com/kristina-hager/Spatialite-Database-Driver/blob/master/README.md , а также ссылка на приложение, использующее модуль.

примечание: для этого модуля нет готового .jar или.доступны файлы aar, поэтому я использую общие объекты + файлы java src в модуле.

Смежные вопросы