在Android Studio 2.2开始支持CMake方式编译C++代码,大大简化了JNI的开发。从ndk-build迁移到CMake也非常简单。
修改Gradle,增加对CMake的支持
apply plugin: 'com.android.library'
android {
compileSdkVersion 29
defaultConfig {
minSdkVersion 15
targetSdkVersion 29
versionCode 1
versionName "1.0"
// ndk {
// moduleName "sign"
// stl "stlport_static"
// ldLibs "log"
// abiFilters "armeabi" ,"x86","armeabi-v7a", "x86_64", "arm64-v8a"
// cFlags "-w -fexceptions"
// }
externalNativeBuild {
cmake {
cppFlags "-w -fexceptions"
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
externalNativeBuild {
cmake {
path "src/main/cpp/CMakeLists.txt"
version "3.10.2"
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
}
修改src/main/jni为src/main/cpp
ndk-build的C++存放目录在jni,所以需要修改为cpp。
src/main/cpp增加CMakeLists.txt文件
cmake_minimum_required(VERSION 3.4.1)
# 添加所有的C++相关代码到下面set方法
set(SRC_LISTS
aaa.h
aaa.cpp
bbb.h
bbb.cpp
XXXX.cpp
com_xx_xxx_jni_XXXX.h
)
# moduleName "sign"
add_library(sign
SHARED
${SRC_LISTS})
总结
https://developer.android.google.cn/ndk/guides/cmake
只需要简单的三步就完成了从ndk-build迁移到cmake方式编译JNI代码。在以前只支持ndk-build的时候,开发JNI是一件非常痛苦的事情,编写C++代码只能使用其他的工具调试,比如Xcode、CLion。改成CMake方式编译,瞬间化解了我几年前开发JNI的痛苦记忆。
- CMake对C++代码进行Debug非常简单,就好像是调试java代码一样。
- CMake和Gradle结合,不会像ndk-build一样对C++代码显示一片红色警告,而是看到正确的include引用和代码联想。
网友评论