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

时间:2011-12-27 23:50:43

标签: android eclipse

我下载了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 个答案:

答案 0 :(得分:21)

了解他们如何在示例项目中进行设置: http://code.google.com/p/apv/source/browse/#hg%2Fpdfview

这个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. 然后定义要导入的本机函数。由于native关键字,您可以识别这些功能。查看下面的文件,了解它们在示例中导入的函数:

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

答案 1 :(得分:5)

正如所提到的another Stack Overflow thread about this topic关闭“在构建时自动刷新资源和资产文件夹”和“在外部jar包含本机库时强制错误”在Window / Preferences / Android / Build下有帮助。至少它在我的情况下有所帮助!

不要忘记将so-file放在'lib s / armeabi'中,以便在运行时使用它。

希望这对其他人有所帮助,如果对Li_W来说太晚了。