如何在 Java 中运行 C 代码

Posted

技术标签:

【中文标题】如何在 Java 中运行 C 代码【英文标题】:How to run C code in Java 【发布时间】:2014-08-27 23:38:26 【问题描述】:

我发现 Java 是一种出色的高级语言,但它缺乏其创始语言 C 的速度和灵活性。

看到 android 操作系统是用 C 和 Java 编写的,这两种语言似乎很可能相互补充。

如何将 C 代码导入 Java 程序?

PS。如果您知道如何在 Android 操作系统上执行此操作,则会获得奖励积分。

【问题讨论】:

developer.android.com/training/articles/perf-jni.html 【参考方案1】:

对于 Android,使用的工具是本机开发工具包。你可以阅读它(并得到它)here。请注意,他们说明了这一点:

您应该了解NDK 不会使大多数应用受益

(强调原文。)

正如@jdphenix 在评论中指出的那样,您需要熟悉 Java 原生接口规范才能将 C/C++ 代码与 Java 集成。 NDK 是一个支持在 Android 应用中使用 JNI 的工具。

编辑(回应评论):使用两种语言,因为你需要使用一种语言(Android 的情况下是 Java),而你喜欢另一种语言(C/C++)让我觉得适得其反,除非您有强大的性能理由这样做。正如 NDK 的文档所说:

[U]在 Android 上使用本机代码通常不会带来显着的(原文如此)性能提升,但它总是会增加您的应用复杂性。一般而言,您应该只在对您的应用程序必不可少的情况下使用 NDK,而不是因为您只是更喜欢使用 C/C++ 编程。

NDK 的典型候选对象是 CPU 密集型工作负载,例如游戏引擎、信号处理、物理模拟等。

此外,使用两种语言会使您的应用程序的维护变得更加困难。 JNI 不仅是一项困难的技术,而且该应用程序需要保持两种语言的技能。如果您出于性能原因确实需要使用 NDK,我会努力将其限制在最低限度。大多数 Java 框架都非常高效,尤其是在许多设备上都出现了 Dalvik JIT 编译器的情况下。

顺便说一句,如果您对 Android 游戏开发特别感兴趣,您可能还想查看Google Play Games C++ SDK。它是 NDK 的伴侣。

附:从 Android 4.4 开始,可以选择将 Dalvik 运行时替换为新的 Android 运行时 (ART)。 (阅读它here。)这会在安装应用程序时将应用程序的字节码编译为本机代码。结果是,当启用 ART 时,使用 JNI 的大部分性能优势消失了。我预计,一旦谷歌对“在野外”测试它有信心,未来的 Android 版本将默认使用 ART。除非你真的需要,否则不要在你的应用程序中使用 JNI 的另一个原因。

【讨论】:

【参考方案2】:

Java 中的native 关键字可以使用以另一种语言编写的代码,使用Java 本机接口。在这里阅读更多:

https://www3.ntu.edu.sg/home/ehchua/programming/java/JavaNativeInterface.html

【讨论】:

使用JavaCPP 这样的工具会更容易;)

以上是关于如何在 Java 中运行 C 代码的主要内容,如果未能解决你的问题,请参考以下文章

java中请问如何等待一个线程结束在运行其他的代码?

cmd如何编译记事本中的代码

idea中java文件图标如何转换?

如何在cmd中D盘目录下运行notepad

java代码如何生成可运行的程序 例如c一样,编译后有exe java是否一定要jdk??

如何在 Maven 项目中从 C 运行 java 类文件