安卓开发:Java、C还是C++?

32

我使用Java编写了一些简单的Android应用程序。
但后来我发现这个:

它提供了头文件和库,允许您在C或C++中编程时构建活动、处理用户输入、使用硬件传感器、访问应用程序资源等等。 (来源)

这与以下内容有何关联:

Android应用程序是使用Java编程语言编写的。 (来源)

这三种语言都可能吗?
对不起,问得有点愚蠢。

6个回答

34
您提供的链接中的文章信息很好。它还链接到 http://developer.android.com/sdk/ndk/overview.html,该网页中提到:

大多数应用程序不会受益于使用 NDK。作为开发者,您需要权衡其优点和缺点;特别是,使用本地代码并不能自动增加性能,而总是会增加应用程序的复杂性。通常情况下,只有在本地代码对应用程序至关重要时,才应该使用本地代码,而不仅仅是因为您喜欢使用 C/C++ 进行编程。

最适合使用 NDK 的典型候选项是那些不分配太多内存的自包含的 CPU 密集型操作,例如信号处理、物理模拟等。仅仅把一个方法改写成 C 语言通常不会带来很大的性能提升。在决定是否应该使用本地代码时,请考虑您的需求,并查看 Android 框架 APIs 是否提供了您所需的功能。然而,NDK 可以是重用大量现有的 C/C++ 代码的有效方式。


也许我最近对Java与NDK性能的短期研究会有所帮助:https://stackoverflow.com/questions/67423616/how-android-runtime-compiles-java-more-efficiently-than-the-clang-c-%d0%a1-compiler/67454121#67454121 - Bolat Basheyev

5

安卓系统底层是Linux,因此您可以在其上运行任何语言。我曾经在安卓手机上运行过Perl脚本,仅出于兴趣而已。从实际的应用开发角度来看,谷歌对Java的实现运行在Dalvik上将是典型的选择。


4

Java始终允许您调用“本地代码”组件。然而,如果可能的话,应避免使用它们,因为它们可能会在您的代码中引入微妙的错误和平台依赖性。

我认为您不能完全使用C/C++编写Android应用程序 -- 至少必须有一个Java包装器。


3

这是一个好问题,据我所知,当您真正想要编写一些核心dalvik功能而不是使用Android API时,c或c ++就会出现在画面中,就像您所提出的问题一样,比如与传感器相关的功能或硬件。

如果您想使用API构建应用程序,则大多数情况下将使用Java/XML。


1
Dalvik大部分是用C++编写的,但在JVM上工作并不等同于为Android编写应用程序。C++ API比Java API受限得多 - 我甚至不确定是否存在本地API供传感器使用..而对于Java来说,显然有一个。 - Voo

2
根据这项调查,使用C语言重新编写其中一个“自包含的、CPU密集型操作,并且不分配太多内存”的操作,可能会将性能/电池寿命提高17倍。而这篇文章发现运行CCTOOLS Fortran更快。因此,值得考虑使用其他替代语言。请注意,保留HTML标签。

0

对于像计算机图形应用程序、游戏、模拟、人工智能/专家系统、数字图像处理或计算机视觉等需要大量CPU的应用程序,建议使用C/C++。如果您正在构建一个仅涉及数据(JSON、XML)及其表示或小型图形应用程序(棋盘游戏、90年代的复古游戏),那么JAVA就足够了。


该问题已经有多个相关且被接受的答案。我建议您修改答案并包含之前回答中未涉及的更有用的信息。顺便说一句,这个问题已经存在8年了。 - Dhrubo

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