JNI 简介
在讲 NDK 之前,先要搞清楚什么是 JNI。
定义:Java Native Interface,即 Java 本地接口。
作用: 使得 Java 与本地其他类型语言(如 C、C++)交互。也就是在 Java 中调用 C/C++ 代码,或者在 C/C++ 中调用 Java 代码。
注意,JNI 是 Java 的,和 Android 无关。
NDK 简介
定义:Native Development Kit,是 Android 的一个工具开发包。
那到底 JNI 和 NDK 有什么区别呢?
NDK 可以看做是 Android 中实现 JNI 的一种手段,通过 NDK,还可以打包 C/C++ 动态库,并自动打包进 APK/AAR 中。
最简单的 NDK 项目
Android Studio 新建项目的时候可以选择各种各样的模板,选择 Native C++ 模板就可以创建一个简单的 NDK 项目。
在 app/src/main/cpp 下可以看到有 CMakeList.txt 和 native-lib.cpp。
native-lib.cpp 里面是原生代码。
CMakeList.txt 是 CMake 构建脚本,用于把原生代码构建入库。
CMakeList.txt
# For more information about using CMake with Android Studio, read the
# documentation: https://d.android.com/studio/projects/add-native-code.html
# Sets the minimum version of CMake required to build the native library.
cmake_minimum_required(VERSION 3.10.2)
# Declares and names the project.
project("myndk")
# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds them for you.
# Gradle automatically packages shared libraries with your APK.
add_library( # Sets the name of the library.
myndk
# Sets the library as a shared library.
SHARED
# Provides a relative path to your source file(s).
native-lib.cpp)
# Searches for a specified prebuilt library and stores the path as a
# variable. Because CMake includes system libraries in the search path by
# default, you only need to specify the name of the public NDK library
# you want to add. CMake verifies