如何将本地库(.so文件)导入Eclipse?

20

我已下载 Android PDF Viewer 源代码并尝试在 Eclipse 中编译。我的朋友说,我可以从这里的 APK 文件中提取预编译的 .so 文件,而不必去折腾 Cygwin 或重新编译本机 C 库:

http://code.google.com/p/apv/downloads/detail?name=apv-0.3.1dev13.apk&can=2&q=

我应该如何将这些 libpdfview2.so 文件导入到 Eclipse 项目中?

更新:Eclipse 给出以下错误,并且无法运行:

项目“APV”中所需库的存档:“lib/armeabi/libpdfview2.so”无法读取或不是有效的 ZIP 文件。

2个回答

21

请参考示例项目中的设置方式: http://code.google.com/p/apv/source/browse/#hg%2Fpdfview

有关使用NDK的更多帮助,请参考以下教程: http://mobile.tutsplus.com/tutorials/android/ndk-tutorial/

基本步骤如下:

  1. .so库文件通常存放在项目根目录下的libs子文件夹中。此外,它们通常位于描述其架构的进一步子文件夹中(例如,project_root_dir/libs/armeabi/libpdfview2.so)。

  2. 要在活动中使用库,您需要在活动中添加静态库加载器,如下所示:

    static
    {
    System.loadLibrary("pdfview2"); // 注意没有lib前缀
    }

  3. 然后,您需要定义导入的本地函数。通过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);  

这就是我想做的,但我无法从C源代码编译该项目。我已经成功地从APK中提取了编译后的库文件,但不知道如何将它们包含到Eclipse中的Android项目中。 - Li_W
你有按照这里的构建说明进行操作吗?http://code.google.com/p/apv/source/browse/pdfview/jni/build-instructions.txt - Theo
是的,它没有起作用。我放弃了。那些指令是用于构建libpdfview2.so的,而我已经从APK中提取了该文件,因此我不需要帮助构建C源代码。我需要帮助将其导入/链接到Android应用程序。 - Li_W
谢谢!其中大部分已经完成了;我已经更新了问题,并列出了我在Eclipse中仍然遇到的具体错误。我已经尝试过谷歌搜索,但没有结果。 - Li_W
我正在使用/lib。稍后去吃晚饭,再来看这个。感谢您的帮助。 - Li_W
1
现在可以工作了。我需要使用/libs而不是/lib,就像答案所建议的那样。谢谢! - Li_W

5
如上所述,在 Window/Preferences/Android/Build 下关闭“构建时自动刷新资源和资产文件夹”和“当外部 jar 包含本地库时强制出错”可以帮助解决这个问题,更多信息请参考另一个与此主题相关的 Stack Overflow 帖子。至少在我的情况下有用!
并且不要忘记将 so 文件放在“lib/s/armeabi”中,以便在运行时可用。
希望这能帮助其他人,即使对 Li_W 来说已经太晚了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接