为什么Android应用程序不应该用C / C++编写,因为你“只是更喜欢用C / C++编程”?[已关闭]

2022-08-31 10:56:21

更新(为了清晰和减少歧义):

我将开始修补Android应用程序。我计划使用NDK编写C++(因为我在C++方面有更多的经验,并且更喜欢Java),但在Android NDK页面上遇到了以下内容:

您只应在 NDK 对您的应用至关重要时才使用它,切勿因为您只是喜欢使用 C/C++ 进行编程。

我的印象是,只要适合工作,就应该使用你喜欢的语言。有人可以解释为什么如此强烈地建议不要使用C / C++进行Android开发吗?


源语言:

我将开始修补移动应用程序,特别是Android,它是我当前手机的操作系统,我想知道用C++编写应用程序(或者至少是核心,然后用Java包装)是否是一个可以接受的选择。

一些背景,我是计算机科学专业的,已经选修了3门C++课程(入门,中级,OOP,并在春季参加STL课程),只有1门Java课程(中级)。正因为如此,我对C++更满意,并且更喜欢Java。我在Android NDK页面上遇到了以下内容:

在 Android 上使用原生代码通常不会带来明显的性能提升,但总会增加应用的复杂性。通常,您只应在 NDK 对您的应用至关重要时才使用 NDK,切勿因为您只是喜欢使用 C/C++进行编程。

  • 我的印象是,你应该使用适合工作的语言以及你熟悉的语言。
  • 我可能希望将应用程序移植到另一个支持C++但不支持java的移动平台,例如iOS。
  • 虽然Java是一种高级语言,因此应该使开发更快,但我觉得开发会更慢,因为我必须重新学习几乎所有东西(因为我只上了一门关于该语言的课程)

任何建议将不胜感激。

ps:关于这个主题的许多答案都是几年前的,很少有后续答案提到NDK允许在android 2.3及更高版本上开发完整的本机应用程序。


答案 1

这样想吧。您可以使用 Java SDK 构建一个完整的工作应用程序,该应用程序可以利用开发人员可用的 100% API。使用 NDK 无法完成任何操作,而 SDK(从 API 角度来看),NDK 只是提供更高的性能。

现在反过来看。如果选择在 NDK 中 100% 编写应用程序,您仍然可以编写功能齐全的应用程序,但可以访问的框架 API 数量有限。并非所有的Android框架都可以在原生层访问;大多数 API 都是 Java。这并不是说您可能需要的所有 API 在 NDK 中都不可用,但远未公开所有 API。

除此之外,NDK 还引入了特定于平台的代码,从而扩展了发行版的规模。对于您打算支持的每个设备架构,您的原生代码都必须内置到 .so 文件(一个用于 armv5、armv7 和 x86)中,所有文件都打包到同一个 APK 中。这种可执行代码的重复会使你的应用大小达到 3 倍(即“胖二进制文件”),除非你在分发应用时承担为每个架构构建单独的 APK 的任务。因此,如果您不希望APK的大小显着增长,则部署过程会变得更加繁重。

同样,虽然这些都没有阻止你做你选择的事情,但它指出了为什么谷歌将Java描述为大多数代码的“首选”方法,以及阻力最小的路径。我希望它能阐明为什么文档的措辞是这样的。


答案 2

如果您打算在生活中只开发一个应用程序,请使用 NDK。

如果你的目标是学习Android开发,目的是在你的一生中开发多个应用程序 - 并且希望能够正确地支持它们 - 如果你学习Java并使用Android的Java SDK,从长远来看,你很可能会做得更好。


推荐