如何正确导入带有JNI代码的Android库?

9

背景

我制作了一个使用JNI处理位图的小型SDK(链接在这里)。

它只有两个项目:一个示例项目(演示SDK的使用方法)和SDK本身。

SDK项目是一个Android项目,其中包含一些C / C ++代码。

问题

由于某种原因,尽管当我创建项目时一切都很正常,但现在当我尝试获取库项目并将其导入Eclipse时,然后打开我制作的CPP文件时,我会看到许多错误,如下所示:

enter image description here

问题

为什么会发生这种情况?我该如何正确导入该项目?我能否帮助使用此项目的人轻松导入它?

我尝试创建一个全新的具有JNI的项目,并仅仅复制(小心地)我的库文件,它编译得很好,但这不是导入项目的好方法...


我也遇到了这个问题。你的Eclipse是否安装了Eclipse CDT插件? - Sebastiano
@dextor 不是的,但是当你安装Android的ADT&SDK时,它会被自动安装。也许我为了支持它多做了一步,但就这样。 - android developer
我正在运行Android SDK Tools 22.3。我已经检查过,你是正确的,有一个更新可以升级到22.6版本。我也在更新到API 19 SDK rev 3;顺便说一下,我正在使用NDK r9b。你面临的问题可能与CDT插件或SDK/NDK的操作系统版本有关。 - Sebastiano
我可以确认。我刚刚更新了所有我能更新的东西。除了缺少的res/文件夹(你一定要创建),一切都可以完美编译,CPP文件也没有问题。自动完成功能正常。 - Sebastiano
你在使用Linux吗?我在考虑一个特定于平台的ADT错误。 - Sebastiano
显示剩余10条评论
1个回答

5
这个Eclipse错误经常发生,你的解决方案(创建一个空项目然后添加文件)是最快的解决方法,在遇到这种情况时我们都会使用它。 另一个解决方案是删除c和Android nature,然后再将这些nature添加到项目中(通常也能解决问题)。
当创建一个新项目时,Eclipse会添加它的nature和工具链。如果你导入一个旧项目,这些工具链/nature可能会被错误地导入。
对于包含C和C++的项目,你需要在".project"文件中定义cnature和ccnature。对于Android,你需要Android Nature。 为了编译Android,你需要在.cproject文件中定义com.android.gcc作为工具链。
根据ADT/CDT/Eclipse的版本不同,.cproject中的工具链值也不同,因此很难从一台机器导入到另一台机器。
我猜你的错误暴风雨是因为.cproject文件生成错误了。
编辑
经过Android开发者的进一步研究,可以按以下步骤更快地绕过Eclipse由于如何向项目添加本机nature而造成的限制:
  1. delete from the ".project" file the "cnature" and "ccnature"

    <nature>org.eclipse.cdt.core.cnature</nature>
    <nature>org.eclipse.cdt.core.ccnature</nature>
    
  2. delete the ".cproject" file from eclipse workspace

  3. remove all generated files and folders : libs, obj, gen and bin

  4. Re-add the native support for android via the "android tools" context menu

感谢安卓开发者。


有没有更简单的解决方法?我的解决方案并不像看起来那么简单,因为你需要仔细删除所有内容,并从原始项目中复制所有文件,然后使用新的库项目... - android developer
尝试删除.project文件中的.cproject、cnature和ccnature,然后选择“转换为C/C++项目”以强制重新创建这些文件。(当然要先备份 :))。 - MichaelCMS
你检查过这个解决方案吗?你克隆了我制作的库项目并完成了所有步骤吗? - android developer
不,我没有(抱歉,但我不在正确的地方)。我只是指出了问题可能来自哪里以及我们通常在遇到这种情况时如何解决。这个问题不仅存在于Android jni上,还存在于严格的C / C ++项目中。 - MichaelCMS
1
好的,我已经尝试了你提供的方法。但是由于没有“转换为C/C++项目”的选项,所以它并没有起作用。不过,我找到了另一种方法:1. 删除你写的东西。2. 删除文件夹“libs”、“gen”、“bin”、“obj”。3. 通过“Android工具”上下文菜单选择“添加本地支持...”,它会完成整个工作。然后你只需要选择C/C++的确切代码文件名。4. 编译和运行。这真的起作用了。虽然不是很好,但比处理太多文件要好(如果你有很多文件的话)。 - android developer
显示剩余4条评论

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