Подтвердить что ты не робот

Как импортировать собственную библиотеку (.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 файлом

4b9b3361

Ответ 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.