使用 NDK(Native Development Kit)意味着在 Android 应用程序中集成 C/C++ 代码。通常情况下,Android 应用程序主要使用 Java 或 Kotlin 编写,但有时候需要使用 C/C++ 来实现一些特定的功能或性能优化。
NDK 提供了一组工具和库,使开发者能够使用 C/C++ 语言编写 Android 应用程序的一部分或全部代码。通过使用 NDK,可以将 C/C++ 代码与 Java 代码混合使用,以实现更高效的计算、访问底层硬件、使用现有的 C/C++ 库等目的。
以下是一些适合使用 NDK 的情况:
性能优化:C/C++ 语言通常比 Java 语言更快,通过使用 NDK 可以将性能敏感的部分代码用 C/C++ 实现,提高应用程序的执行效率。
硬件访问:有些硬件功能(如摄像头、传感器)可能更容易通过 C/C++ 接口访问,使用 NDK 可以直接调用底层的 C/C++ 接口。
移植现有代码:如果已经有现有的 C/C++ 代码库,可以使用 NDK 将其移植到 Android 应用程序中,避免重写相同的功能。
使用 NDK 编写 C/C++ 代码的基本步骤如下:
设置开发环境:安装 Android NDK,并配置开发环境变量。
创建 JNI 接口:在 Java 代码中创建 JNI(Java Native Interface)接口,用于与 C/C++ 代码进行交互。
编写 C/C++ 代码:编写所需的 C/C++ 代码实现功能。
编写 Android.mk 文件:创建一个 Android.mk 文件,描述 C/C++ 代码的构建规则和依赖关系。
使用 ndk-build 构建:使用 NDK 提供的 ndk-build 命令来构建项目,将 C/C++ 代码编译为可执行文件或库。
在 Java 代码中调用:在 Java 代码中使用 JNI 接口来调用 C/C++ 方法。
需要注意的是,在使用 NDK 进行开发时,应优先考虑使用 Java 或 Kotlin 来编写应用程序的大部分逻辑。只有对性能要求较高或需要与底层硬件进行交互时,才考虑使用 NDK 编写部分代码。
使用 NDK(Native Development Kit)意味着在 Android 应用程序中集成 C/C++ 代码。通常情况下,Android 应用程序主要使用 Java 或 Kotlin 编写,但有时候需要使用 C/C++ 来实现一些特定的功能或性能优化。
NDK 提供了一组工具和库,使开发者能够使用 C/C++ 语言编写 Android 应用程序的一部分或全部代码。通过使用 NDK,可以将 C/C++ 代码与 Java 代码混合使用,以实现更高效的计算、访问底层硬件、使用现有的 C/C++ 库等目的。
以下是一些适合使用 NDK 的情况:
性能优化:C/C++ 语言通常比 Java 语言更快,通过使用 NDK 可以将性能敏感的部分代码用 C/C++ 实现,提高应用程序的执行效率。
硬件访问:有些硬件功能(如摄像头、传感器)可能更容易通过 C/C++ 接口访问,使用 NDK 可以直接调用底层的 C/C++ 接口。
移植现有代码:如果已经有现有的 C/C++ 代码库,可以使用 NDK 将其移植到 Android 应用程序中,避免重写相同的功能。
使用 NDK 编写 C/C++ 代码的基本步骤如下:
设置开发环境:安装 Android NDK,并配置开发环境变量。
创建 JNI 接口:在 Java 代码中创建 JNI(Java Native Interface)接口,用于与 C/C++ 代码进行交互。
编写 C/C++ 代码:编写所需的 C/C++ 代码实现功能。
编写 Android.mk 文件:创建一个 Android.mk 文件,描述 C/C++ 代码的构建规则和依赖关系。
使用 ndk-build 构建:使用 NDK 提供的 ndk-build 命令来构建项目,将 C/C++ 代码编译为可执行文件或库。
在 Java 代码中调用:在 Java 代码中使用 JNI 接口来调用 C/C++ 方法。
需要注意的是,在使用 NDK 进行开发时,应优先考虑使用 Java 或 Kotlin 来编写应用程序的大部分逻辑。只有对性能要求较高或需要与底层硬件进行交互时,才考虑使用 NDK 编写部分代码。
一个项目的目录结构。Includes文件夹中存放.h(头文件),当编译动态库时,会依据Android.mk,.c,.h文件生成动态库文件。
Project模式查看:
可以查看到对应的so库,还有头文件.h。相当于ffmpeg,SDL,src各是一个项目一样,而不同的是src中包含源代码.c文件。
升级后的项目构建:改用Cmake后:
Android模式下:
Project模式下:
#####
猜测:在project模式 下,将源代码.c,头文件.h,CmakeLists文件放在一起,可以指定最终生成的so文件放在jniLib文件夹中,然后编写jni,然后在java应用程序中调用。
学习 C++,关键是要理解概念,而不应过于深究语言的技术细节。
学习程序设计语言的目的是为了成为一个更好的程序员,也就是说,是为了能更有效率地设计和实现新系统,以及维护旧系统。
- 封装(Encapsulation):封装是将数据和方法组合在一起,对外部隐藏实现细节,只公开对外提供的接口。这样可以提高安全性、可靠性和灵活性。
- 继承(Inheritance):继承是从已有类中派生出新类,新类具有已有类的属性和方法,并且可以扩展或修改这些属性和方法。这样可以提高代码的复用性和可扩展性。
- 多态(Polymorphism):多态是指同一种操作作用于不同的对象,可以有不同的解释和实现。它可以通过接口或继承实现,可以提高代码的灵活性和可读性。
- 抽象(Abstraction):抽象是从具体的实例中提取共同的特征,形成抽象类或接口,以便于代码的复用和扩展。抽象类和接口可以让程序员专注于高层次的设计和业务逻辑,而不必关注底层的实现细节。