Как импортировать собственную библиотеку (.so файл) в Eclipse?
Я загрузил исходный код Android PDF Viewer и пытаюсь скомпилировать его в Eclipse. Вместо того, чтобы возиться с Cygwin и перекомпилировать родные библиотеки C, мой друг сказал, что я могу просто извлечь предварительно скомпилированные .so файлы из APK здесь:
http://code.google.com/p/apv/downloads/detail?name=apv-0.3.1dev13.apk&can=2&q=
Как именно я импортирую эти файлы libpdfview2.so в проект eclipse?
Обновлено: Eclipse дает следующую ошибку и не запускается:
Архив необходимой библиотеки: "lib/armeabi/libpdfview2.so" в проекте "APV" не может быть прочитан или не является допустимым ZIP файлом
Ответы
Ответ 1
Посмотрите, как они настраиваются в примере проекта:
http://code.google.com/p/apv/source/browse/#hg%2Fpdfview
Этот учебник NDK также может быть полезен с точки зрения помощи вам в определении того, как все работает с NDK:
http://mobile.tutsplus.com/tutorials/android/ndk-tutorial/
Основы таковы:
-
Файлы библиотеки .so обычно входят в подпапку project_root_dir/libs. Кроме того, обычно они находятся в дополнительных подпапках, которые описывают их архитектуру (например, project_root_dir/libs/armeabi/libpdfview2.so).
-
Чтобы использовать библиотеку в действии, вы добавляете загрузчик статической библиотеки в действие, как показано ниже:
Статическая
{
System.loadLibrary( "pdfview2" );//Обратите внимание на отсутствие префикса lib
}
-
Затем вы определяете собственные функции, которые вы импортируете. Вы можете распознать эти функции благодаря ключевому слову native. Посмотрите в файле ниже, чтобы увидеть, какие функции они импортируют в образце:
http://code.google.com/p/apv/source/browse/pdfview/src/cx/hell/android/pdfview/PDF.java?r=560343d2dad904c5c925b6cadf97b90430fd25f4
Вот несколько примеров:
private native int parseBytes(byte[] bytes);
private native int parseFile(String fileName);
private native int parseFileDescriptor(FileDescriptor fd);
Ответ 2
Как упоминалось другой поток об этом тему, выключение "Автоматическое обновление папки" Ресурсы и активы "при сборке" и "Принудительная ошибка, когда внешние банки содержат родные библиотеки" в Window/Preferences/Android/Build помогают. По крайней мере, это помогло мне в моем случае!
И не забудьте поставить so-file в lib s/armeabi, чтобы он был доступен во время выполнения.
Надеюсь, это помогло другим, также, если было слишком поздно для Li_W.