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

2 ответа

Решение

Посмотрите, как они настроены в примере проекта: http://code.google.com/p/apv/source/browse/

Этот учебник NDK также может быть полезен с точки зрения того, чтобы помочь вам понять, как все работает с NDK: http://mobile.tutsplus.com/tutorials/android/ndk-tutorial/

Основы таковы:

  1. Файлы библиотеки.so обычно находятся в подпапке project_root_dir/libs. Кроме того, как правило, они находятся в следующих подпапках, которые описывают их архитектуру (например, project_root_dir/libs/armeabi/libpdfview2.so).

  2. Чтобы использовать библиотеку в упражнении, вы добавляете в действие загрузчик статической библиотеки, как показано ниже:

    статический
    {
    System.loadLibrary ("pdfview2"); // Обратите внимание на отсутствие префикса lib
    }

  3. Затем вы определяете собственные функции, которые вы импортируете. Вы можете узнать эти функции благодаря встроенному ключевому слову. Посмотрите в файле ниже, чтобы увидеть, какие функции они импортируют в примере:

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);  

Как уже упоминалось, другой поток Stack Overflow об этой теме отключает "Автоматическое обновление папки" Ресурсы и активы "при сборке" и "Принудительная ошибка, когда внешние файлы jar содержат собственные библиотеки" в меню "Окно / Настройки" / "Android" / "Сборка". По крайней мере, это помогло в моем случае!

И не забудьте поместить файл so в 'lib s/ armeabi', чтобы он был доступен во время выполнения.

Надеюсь, что это помогло другим, даже если это было слишком поздно для Li_W.

Другие вопросы по тегам