Android NDK – 只能用C / C ++编写

有没有一种可能的方式来编写一个完整的NDK应用程序与C / C + +没有Java的“起动器”类像在Hello-Jni示例项目(HelloJni.java) – 以某种方式创build一个HelloJni.c将执行相同的?

自从Android 2.3(API Level 9)以来,就有了NativeActivity,它只允许用C ++编写一个Android应用程序。 NDK包中也有一个例子。

NDK报价概述 :

本地代码何时开发

NDK不会受益于大多数应用程序。 作为一名开发人员,您需要权衡自身的弊端。 值得注意的是,使用本机代码不会导致性能自动增加 ,但总会增加应用程序的复杂性。 一般来说,如果对于应用程序来说必须使用本机代码,而不仅仅是因为您更喜欢用C / C ++编程。

NDK的典型优秀候选者是独立的CPU密集型操作,不会分配太多的内存,如信号处理,物理仿真等等。 简单地重新编写一个在C中运行的方法通常不会导致性能的大幅提升 。 在检查是否应该用本机代码开发时,考虑一下你的需求,看看Android框架API是否提供了你需要的function。 但是,NDK可以成为重用大量现有C / C ++代码的有效方法

Android框架提供了两种使用本机代码的方法:

  • 使用Android框架编写应用程序,并使用JNI访问Android NDK提供的API。 这种技术可以让您充分利用Android框架的便利,但仍然允许您在必要时编写本机代码。 您可以在运行Android 1.5或更高版本的设备上安装通过JNI使用本机代码的应用程序。

  • 编写一个本地活动,它允许您在本机代码中实现生命周期callback。 Android SDK提供了NativeActivity类,它是一个方便的类,用于通知您的本地代码任何活动生命周期callback(onCreate(),onPause(),onResume()等)。 您可以在您的本机代码中实现callback来处理这些事件。 使用本地活动的应用程序必须在Android 2.3(API Level 9)或更高版本上运行。

您不能在本地访问诸如服务和内容提供程序之类的function,因此如果您想要使用它们或任何其他框架API,则仍然可以编写JNI代码来执行此操作。

在移植代码的时候我会采用C / C ++,可能在开发跨平台的游戏的时候。

由于所有UI,graphics和其他有趣的类都是用Java编写的,所以你将不得不使用Java这种或那种方式

另一个意思是通过JNI与所有的Java类进行接口。 有一个库: https : //github.com/DmitrySkiba/itoa-jnipp 。 检查HelloJNIpp示例 – 它显示了在C ++中完全编写Android应用程序的确是可能的,唯一的问题是您需要首先实现所有需要的包装(有些位于samples / common文件夹中)。

不过,我推荐使用Java。 它简单而优雅,拥有绝佳的图书馆和工具。