我可以使用C++或C进行安卓编程吗?

60

我能用C++、C进行Android编程吗?如果是“可以”,那么请告诉我怎么做?以及安装过程是什么?

我不懂Obj-C和Java,但我精通C、C++、Flash AS3和Google发布的SDK。

请不要谈论NVIDIA SDK,它还没有完全开发好 :)

7个回答

59

请注意:以下答案已经非常过时,可能不再完全正确。

您可以使用Android NDK来编写C/C++程序。您需要将C++代码库封装在静态库中,并通过Java包装器和JNI加载它。

标准的NDK不支持RTTI以及许多标准C++的功能也不可用,例如std::string等。为了解决这个问题,您可以重新编译NDK。Dmitry Moskalchuk提供了一个修改版的NDK,支持这一点,下载地址为http://www.crystax.net/android/ndk-r3.php。这个修改版适用于所有运行在ARM处理器上的Android手机。

根据应用程序的类型,您应该决定使用Java还是C/C++。如果需要高于平均计算能力和游戏,则应使用C/C++;对于其他情况则使用Java。

只需选择一种语言,并在该语言中编写大部分应用程序;JNI调用可能会极大地降低性能。不过,如果您知道如何在C/C++中编程,学习Java也并不难。Java的优点是应用程序可以在任何运行Android的设备上运行,而NDK应用程序则依赖于其编译的架构。


1
以下哪个回答是正确的?是下面这个标题下的回答吗?还是其他五个回答中几乎没有任何投票的回答? -: - hippietrail
答案本身我会假设。如果任何其他答案非常过时或者完全错误,请相应地投票或评论。即使细节因环境变化(如新语言、SDK更改或平台消失)而过时,特定的答案本身可能仍然有一些价值。请参考自己(答案)和问题。 - CodeAsm

15

您应该使用Android NDK来开发应用程序中性能关键的部分。请参见Android NDK

但是我认为这并不是开发整个应用程序的正确方式。


8
是的,你可以使用Native Development Kit (NDK)在C++中编写Android应用(大部分情况下),尽管Java是编写Android应用的主要/首选语言,你的C++代码很可能需要与Java组件进行接口交互,并且你很可能需要阅读和理解Java组件的文档。因此,我建议你使用Java,除非你有一些现有的C++代码库需要移植,并且不实用重写为Java。
Java与C++非常相似,我认为你不会遇到任何问题...从C++转到Java非常容易;从Java转到C++则稍微困难一些,但并不糟糕。Java for C++ Programmers 在解释差异方面做得相当不错。使用Java编写Android代码将更具惯用性,也将使开发过程更加轻松(因为Java Android SDK的工具比相应的NDK工具好得多)
在设置方面,Google为Java和C++ Android开发提供Android Studio IDE(使用Gradle作为构建系统),但只要在底层使用Android SDK / NDK生成最终输出,你可以自由选择任何IDE或构建系统。

6
"Java 非常类似于 C++" - alecov
1
@Alek,你有什么反对意见吗?这是真的。从语法上讲,这两种语言非常相似,Java 在很大程度上借鉴了 C++ 的特点。 - Michael Aaron Safyan
2
@MichaelAaronSafyan 只有在从非常肤浅的角度比较语言时才是真实的。 语法确实相似(就像许多流行的语言 - C,C#,JS,PHP等一样),但范式和习惯用法是不同的。 虽然Java仍然专注于类,尽管受到功能元素的最近影响,但C ++早期已经提供了整个抽象机制(全局函数,模板,typedef,functors,运算符重载等),这导致了不同的编程风格。 例如,STL和Java集合的结构非常不同。 - TheOperator
1
它们之间没有任何相似之处,除了它们都是面向对象的。一个是手动内存管理的,另一个是垃圾回收的。这已经是一个巨大的区别了。一个运行在本地,另一个运行在虚拟机中,一个有预处理器,另一个没有。你能在Java中直接进行系统调用吗?不行。一切都是抽象的。一个高度可移植,而另一个则不是。完全不同。语法甚至都不相同。请告诉我在Java中我在哪里使用了<T>。 - Rafael
除非彻底使用JCG,否则Java必须进行JIT编译。Java不仅进行JIT编译,而且会一直重新进行JIT编译,直到认为某些东西已经达到了最优状态。它通常首先使用解释器,这往往非常慢,然后在相当长的时间内通常并没有真正做出优化。我为了自己的好奇心进行了一次比较测试,编写了一些Python函数,其性能相当于等效的Java函数的10倍。在执行了约100次函数之后,Java最终几乎与Python的速度相当。 - Shavais
显示剩余3条评论

3
你应该也看看MoSync,MoSync提供标准的C/C++语言,易于使用的API文档和功能齐全的基于Eclipse的IDE。它现在是一个开源IDE,仍然很酷,但不再维护。

2
你也可以看一看C++ Builder XE6和XE7,它们支持使用C++代码在Android上开发,并且使用Firemonkey库。这是一个很简单的入门方式,而且生成的是原生代码。但是二进制文件大小较大。 http://www.embarcadero.com/products/cbuilder

0

您可以使用Android NDK,但是需要注意的是Android NDK应用程序不是免费使用的,并且在越来越多地由Android驱动的市场中,在没有明确的开源路线的情况下,编程Android on Android意味着您必须放弃Android作为任何类型的第一步编程平台而不付款,因为它不具备Android开发者支持或NDK应用程序的广泛性。

请注意:我认为订阅请求是在胁迫下的支付,这是一个免费试用的上下文环境,它仍然未被开源社区打败。


请您能否再解释一下,我没有理解到重点。 - mohammadsdtmnd

-5

在Android编程中,有不止一种用于C++的库:

  1. C++ - qt(诺基亚产品,也可作为LGPL使用)
  2. C++ - Wxwidget(可作为GPL使用)

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