Android NDK - 仅以 C/C++ 写入

2022-09-02 10:29:14

有没有一种可能的方法可以在没有Java“入门”类的情况下使用C / C++编写整个NDK应用程序,就像hello-jni示例项目(HelloJni.java)一样 - 以某种方式创建一个HelloJni.c,它将做同样的事情?


答案 1

自Android 2.3(API级别9)以来,有NativeActivity,它只允许人们在C++中编写Android应用程序。在 NDK 包中也有一个示例。

NDK概述中的一句话:

何时在本机代码中开发

NDK 不会使大多数应用程序受益。作为开发人员,您需要平衡其优点与缺点;值得注意的是,使用本机代码不会导致性能自动提高,但总是会增加应用程序的复杂性。通常,仅当本机代码对应用程序至关重要时才应使用本机代码,而不仅仅是因为您更喜欢使用 C/C++进行编程。

NDK 的典型候选操作是独立的 CPU 密集型操作,这些操作不会分配太多内存,例如信号处理、物理模拟等。简单地重新编码一个方法以在C中运行通常不会导致性能的大幅提高。在检查是否应该使用本机代码进行开发时,请考虑您的要求,并查看 Android 框架 API 是否提供了所需的功能。但是,NDK 可以成为重用大量现有 C/C++ 代码的有效方法

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

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

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

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

我会在移植代码时以及开发跨平台游戏时采用C / C++。


答案 2

由于所有UI,图形和其他有趣的类都在Java中,因此您必须以某种方式使用Java。

另一个我的意思是通过JNI与所有Java类接口。有一个图书馆:https://github.com/DmitrySkiba/itoa-jnipp。检查HelloJNIpp示例 - 它表明确实可以完全C++编写Android应用程序,唯一的问题是您需要首先实现所有需要的包装器(有些在示例/公共文件夹中)。

但是,我建议使用Java。它简单而优雅,拥有出色的库和工具。


推荐