我发现 Java 是一种优秀的高级语言,但它缺乏其创始语言 C 的速度和灵活性。
看到 Android 操作系统是用 C 和 Java 编写的,这两种语言似乎很可能相互补充。
如何将 C 代码导入 Java 程序?
PS。如果您知道如何在 Android 操作系统上执行此操作,则可以加分。
我发现 Java 是一种优秀的高级语言,但它缺乏其创始语言 C 的速度和灵活性。
看到 Android 操作系统是用 C 和 Java 编写的,这两种语言似乎很可能相互补充。
如何将 C 代码导入 Java 程序?
PS。如果您知道如何在 Android 操作系统上执行此操作,则可以加分。
对于 Android,使用的工具是 Native Development Kit。你可以在这里阅读(并得到它)。请注意,他们指出了这一点:
您应该了解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 的伴侣。
PS 从 Android 4.4 开始,可以选择用新的 Android 运行时 (ART) 替换 Dalvik 运行时。(在此处阅读。)这会在安装应用程序时将应用程序的字节码编译为本机代码。结果是,当启用 ART 时,使用 JNI 的大部分性能优势消失了。我预计,一旦谷歌对“在野外”测试它有信心,未来的 Android 版本将默认使用 ART。除非你真的需要,否则不要在你的应用程序中使用 JNI 的另一个原因。
Java 中的native
关键字可以使用以另一种语言编写的代码,使用 Java 本机接口。在这里阅读更多:
https://www3.ntu.edu.sg/home/ehchua/programming/java/JavaNativeInterface.html