首先了解几个名词
The Android Native Development Kit
The Android NDK is a toolset that lets you implement parts of your app in native code, using languages such as C and C++. For certain types of apps, this can help you reuse code libraries written in those languages.
跨平台外部编译工具,跟Gradle一起编译本地库文件(libarary)。如果只是使用ndk-build编译,无需安装。Ndk-build和CMake不可混用
An external build tool that works alongside Gradle to build your native library. You do not need this component if you only plan to use ndk-build.
在gradle中指定cmake版本
android {
...
externalNativeBuild {
cmake {
...
version "cmake-version"
}
}
}
A CMake build script
# Sets the minimum version of CMake required to build your native library.
# This ensures that a certain set of CMake features is available to
# your build.
cmake_minimum_required(VERSION 3.4.1)
# Specifies a library name, specifies whether the library is STATIC or
# SHARED, and provides relative paths to the source code. You can
# define multiple libraries by adding multiple add_library() commands,
# and CMake builds them for you. When you build your app, Gradle
# automatically packages shared libraries with your APK.
add_library( # Specifies the name of the library.
native-lib
# Sets the library as a shared library.
SHARED
# Provides a relative path to your source file(s).
src/main/cpp/native-lib.cpp )
# Specifies a path to native header files.
include_directories(src/main/cpp/include/)
通过上述配置,将按规则 liblibrary-name.so 生成 libnative-lib.so
java代码里的引用
static {
System.loadLibrary("native-lib");
}
Android Studio 通过它来调试native code。LLDB跟Android Studio一起安装
The debugger Android Studio uses to debug native code. By default, LLDB will be installed alongside Android Studio.
gradle
externalNativeBuild {
cmake {
// Sets optional flags for the C++ compiler.
cppFlags "-frtti -fexceptions -std=gnu++0x -DHAVE_PTHREADS -fpermissive -O3 -Wall -Werror -###"
// Passes optional arguments to CMake.
arguments "-DPRODUCT_CONFIG=effects"
arguments "-DANDROID_STL=c++_shared"
// Sets a flag to enable format macro constants for the C compiler.
cFlags "-D__STDC_FORMAT_MACROS"
}
}
ndk {
abiFilters 'arm64-v8a','armeabi-v7a'
}
https://developer.android.com/studio/projects/gradle-external-native-builds
Java Native Interface
Java或者Kotlin代码通过JNI调研Navtive Library的函数
Your Java or Kotlin code can then call functions in your native library through the Java Native Interface (JNI).
参考
https://developer.android.com/studio/projects/install-ndk#groovy
Android CMake_仰望XX的博客-CSDN博客
Android 开发:CMake 使用_android cmake_zxy_de_android的博客-CSDN博客
Android-CMake语法 - 简书
Android NDK开发扫盲及最新CMake的编译使用 - 知乎