为什么不能用C / C ++编写Android应用程序,因为你“只是喜欢用C / C ++编程”?

更新 (为了清晰并减less歧义):

我要开始摆弄android应用程序。 我打算用NDK编写C ++(因为我有更多的C ++经验并且更喜欢Java),但在Android NDK页面上遇到了以下内容:

你应该只使用NDK,如果它对你的应用程序是必不可less的 – 从来没有,因为你只是喜欢用C / C ++编程。

我的印象是,你应该使用你喜欢的语言,只要它适合工作。 有人可以解释为什么这么严重build议不要使用C / C + +的android开发?


原版的:

我将开始摆弄移动应用程序,特别是Android,这是我目前手机的操作系统,我想知道如果用C ++编写应用程序(或者至less核心,然后包装在Java中)是一个可以接受的select。

有一些背景,我是一个计算机科学专业的学生,​​已经参加了3门C ++课程(介绍,中级,面向对象方面的课程,春季学习STL课程),只有1门Java课程(中级)。 因此,我更喜欢C ++,更喜欢Java。 我在Android NDK页面上遇到以下内容:

在Android上使用本机代码通常不会导致显着的性能提升,但是它总会增加您的应用程序复杂性。 一般来说,如果NDK对于你的应用程序是必不可less的,那么你应该只使用NDK,而不是因为你只是喜欢用C / C ++编程。

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

任何意见将不胜感激。

PS:关于这个问题的许多答案都是从几年前开始的,很less有后续的答案提到NDK允许在android 2.3和更新版本上开发完整的原生应用程序。

想想这样。 您可以使用Java SDK来构build完整的工作应用程序,以充分利用开发人员可用的API的100%。 NDK没有什么可以做的,但是从SDK的angular度来看,NDK只能提供更高的性能。

现在反过来看一下。 如果您select在NDK中编写100%的应用程序,您仍然可以编写一个function完整的应用程序,但是您可以访问的框架API数量有限。 并非所有的Android框架都可以在本地层访问; 大多数API只有Java。 这并不是说可能需要的所有API在NDK中都是不可用的,但是在所有这些API都没有被暴露的地方。

除此之外,NDK还引入了特定于平台的代码,可扩展您的发行版的大小。 对于您打算支持的每种设备体系结构,必须将您的本机代码构build到.so文件(一个用于armv5,armv7和x86)中,并将其全部打包到相同的APK中。 这种可执行代码的重复使您的应用程序的大小是3倍(即“胖二进制”),除非您在分发应用程序时承担为每个体系结构构build单独的APK的任务。 因此,如果您不希望APK显着增长,则部署过程会变得更加轻松。

同样,尽pipe这些都不能阻止你select自己的select,但它指出了为什么Google将Java描述为大多数代码的“首选”方法,并且是阻力最小的path。 我希望能够说明为什么文档是这样写的。

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

如果您打算在您的一生中开发多个应用程序来学习Android开发,并希望能够正确地支持这些应用程序,那么从长远来看,如果您学习Java和改用Android的Java SDK。

King的程序员使用C ++来实现他们的游戏逻辑。 他们的营业额看起来很好。

根据我的经验,C ++用于解决问题,Java用于避免问题。 我喜欢两种语言,但是当你编写好的代码时,C ++是相当有益的。 然而,这可能需要几分钟的魔法才能到达那里。

你也可以推荐C ++作为数据科学家,他们通常可以通过Python或者R来完成他们的工作.C ++可以做得好或者不是更好的performance,但是它只是成为语言的天才。 这就是为什么我永远不会向推荐C ++的人推荐C ++的原因 – 我只是为了他们的所作所为而高枕无忧。

我没有看到任何理由不使用C + +进行正常的android开发,如果你有丰富的经验,在C + +和复杂的操作系统,如Windows或任何其他这样的,那么你可以迅速掌握android,并没有像其他的操作系统。 而学习java或不学习它会更令人沮丧和复杂!

我发现这个有趣的文章: http : //betanews.com/2014/07/22/why-c-is-the-perfect-choice-for-modern-app-development/

C ++专门为平台独立而构build,因此可以在现有的每个操作系统上find。 您的典型移动用户可能知道Android应用程序是Objective-C编写的Java和iOS应用程序,但许多人不知道的是,设备上的内存中存在更多的C / C ++代码。 C / C ++驱动许多小型设备的技术(如与硬件交互的内核,以及典型的运行时间库)以及支持这些设备的电信networking。 对于一个开发团队来说更重要的是,在任何设备和平台上都需要C / C ++接口和库。 Android NDK工具集是完整的C / C ++支持的一个很好的例子,最初为游戏开发团队添加,使他们能够通过避免使用Java和Android Java运行时Dalvik(在其上的虚拟机)获得最佳的性能。 Android的Java代码被执行。 它经常改进以启用每项Android服务。

Java和Android的一般意图是,如果不是所有的应用程序都在Java中编写大部分应用程序,并且只有在没有其他选项的情况下才使用本机的东西…所以编写应用程序的一切都可以在Java中实现。

通过使用Java语言编写,您将在自身和Java世界之间架起一座桥梁,为您省去许多烦恼。

同样,如果你冒险尝试学习Java,你将会对自己有很大的帮助。 您的Android应用程序不仅会更好,而且您将面临与OO完全不同的方法,您将成为更好的程序员。

除此之外,通过使用Java编写代码,您将避免大量的安全风险。

在我看来,这是一个毫不费力的使用Java。

我会说主要应用程序使用Java。 但是,如果你有一些c ++代码,你需要移植到一些你需要的c ++库中,然后使用ndk来处理这些位

SDK已经build立在NDK之上。 如果您使用NDK,则必须编写SDK已经提供的相同代码。 这是返工。

这就像在本机代码中编写Java代码一样,而API则可用于相同的任务。

总之,你想重新发明轮子吗?