Как импортировать нативную библиотеку (файл.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/
Основы таковы:
Файлы библиотеки.so обычно находятся в подпапке project_root_dir/libs. Кроме того, как правило, они находятся в следующих подпапках, которые описывают их архитектуру (например, project_root_dir/libs/armeabi/libpdfview2.so).
Чтобы использовать библиотеку в упражнении, вы добавляете в действие загрузчик статической библиотеки, как показано ниже:
статический
{
System.loadLibrary ("pdfview2"); // Обратите внимание на отсутствие префикса lib
}Затем вы определяете собственные функции, которые вы импортируете. Вы можете узнать эти функции благодаря встроенному ключевому слову. Посмотрите в файле ниже, чтобы увидеть, какие функции они импортируют в примере:
Вот некоторые примеры:
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.