如何使用JNI代码正确导入Android库?

时间:2014-03-08 00:24:51

标签: android c++ eclipse android-ndk java-native-interface

背景

我使用JNI制作了一个用于位图处理的小SDK(链接here)。

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

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

问题

出于某种原因,即使我创建项目时,一切都很顺利,现在我尝试获取库项目并将其导入Eclipse,然后打开我制作的CPP文件,我看到了因此有很多错误:

enter image description here

问题

为什么会发生?如何正确导入项目?我可以帮助那些使用它的人能够很好地导入它吗?

我试图用JNI创建一个全新的项目,并且只是(仔细地)复制了我的库中的文件,编译得很好,但这不是导入项目的好方法......

1 个答案:

答案 0 :(得分:5)

这种日食错误经常发生,你的解决方案(开始一个空项目然后添加文件)是最快的解决方案,我们都会在这方面使用它。 另一个解决方案是删除c性质和Android性质,并将这些性质再次添加到项目中(通常也可以这样做)。

当创建一个新项目时,Eclipse将添加它的性质和它的工具链。如果导入旧项目,则可能导入这些工具链/性质。

对于包含c和c ++的项目,您需要在“.project”文件中定义cnature和ccnature。对于Android,你需要Android自然。 要编译android,你需要将com.android.gcc作为.cproject文件中定义的工具链。

根据ADT / CDT / Eclipse的版本,.cproject中工具链的值不同,因此不容易从一台机器导入到机器。

我的猜测是你有错误风暴,因为.cproject文件是错误生成的。

编辑

在Android开发人员进一步研究之后,可以通过以下步骤更快地绕过Eclipse的限制,这种限制是由如何将原​​生性添加到项目中引起的:

  1. 从“.project”文件中删除“cnature”和“ccnature”

    <nature>org.eclipse.cdt.core.cnature</nature>
    <nature>org.eclipse.cdt.core.ccnature</nature>
    
  2. 从eclipse工作区

  3. 删除“.cproject”文件
  4. 删除所有生成的文件和文件夹:libs,obj,gen和bin

  5. 通过“android工具”上下文菜单重新添加对android的原生支持

  6. 谢谢android开发者。