【问题标题】:How to correctly import an Android library with JNI code?如何正确导入带有 JNI 代码的 Android 库?
【发布时间】:2014-04-11 09:03:18
【问题描述】:

背景

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

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

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

问题

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

问题

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

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

【问题讨论】:

  • 我也遇到了这个问题。您的 Eclipse 是否安装了 Eclipse CDT 插件?
  • @dextor 没有,但是当您安装Android的ADT&SDK时,它无论如何都在安装。也许我为它多做了一步来支持它,但就是这样。
  • 我只是尝试将您的项目导入一个干净的 Eclipse 工作区(导入 -> 现有项目到工作区)。我没有看到任何错误,除了您没有包含 res 文件夹(甚至是空文件夹),这使 aapt 工具非常生气。不过,没有错误。在 OSX 上使用 ADT。
  • @dextor 请尝试打开“jni”文件夹中的 cpp 文件。
  • 是的,在你问这个问题之前我已经做过了。我什至编辑并尝试了自动完成功能。一切都按预期工作。

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


【解决方案1】:

这个 eclipse 错误经常发生,而您的解决方案(启动一个空项目然后添加文件)是最快的解决方法,我们都使用它来解决这个问题。 另一种解决方案是删除 c 特性和 Android 特性,然后将这些特性再次添加到项目中(通常这也可以)。

当一个新项目被创建时,Eclipse 会添加它的特性和工具链。如果您导入旧项目,这些工具链/性质可能会被错误地导入。

对于包含 c 和 c++ 的项目,您需要在“.project”文件中定义 cnature 和 ccnature。对于 Android,您需要 Android Nature。 要编译 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 工作区中删除“.cproject”文件

  3. 删除所有生成的文件和文件夹:libs、obj、gen 和 bin

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

感谢安卓开发者。

【讨论】:

  • 有更简单的解决方法吗?我的解决方案并不像看起来那么简单,因为您需要小心地删除所有内容并从原始项目中复制所有文件,并使用新的库项目...
  • 尝试从 .project 文件中删除 .cproject 以及 cnature 和 ccnature,然后选择“转换为 c/c++ 项目”以强制重新创建文件。 (先备份ofc :))。
  • 你检查过这个解决方案了吗?您是否克隆了我创建的库项目并完成了所有这些工作?
  • 不,我没有(对不起,我没有在正确的地方做这个)。我刚刚说明了问题可能来自哪里以及我们遇到问题时通常如何解决它。我们不仅在 Android jni 上遇到过这个问题,在严格的 C/C++ 项目上也遇到过这个问题。
  • 好的,我试过你提供的。它没有用,因为没有“转换为 c/C++ 项目”。但是,我找到了另一种方法: 1.删除你写的东西。 2.删除文件夹“libs”,“gen”,“bin”,obj”。3.通过“android工具”上下文菜单选择“add native support...”,它就完成了整个工作。然后你就需要为 C/C++ 选择确切的代码文件名。4. 编译并运行。这确实有效。它不是很好,但总比弄乱太多文件(如果你有很多文件)好。
猜你喜欢
  • 2021-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-23
  • 1970-01-01
  • 2012-12-30
相关资源
最近更新 更多