1.1 自带的工程选项创建
依次点击 Android Studio > New Project > Phone and Tablet > Native C++。
java代码在java文件目录,主要是从native层获取一个字符串并显示出来,c++ 代码在 cpp 文件目录。
跟普通安卓项目比会有一下几点区别:
- 点开app模块的build.gradle文件在android{ }中会有如下配置来指定CMakeLists.txt所在目录和cmake版本,cmake目录一般是cpp文件根目录中。本配置是项目支持CMake的基础,没有此项也就没了关联的原生代码。
externalNativeBuild {
cmake {
path file('src/main/cpp/CMakeLists.txt')
version '3.18.1'
}
}
- 上面第一条之外在 android > defaultConfig块中也会指定有如下配置。本配置的作用是指定此模块CMake或者ndk-build可选参数和标记, c++相关的编译选项, abiFilter(编译的架构)等等。CMake的编译产物在
app/build/intermediates/cmake/debug/obj/{abi}
目录中可以找到,可以改可选abi类型做实验看看。
defaultConfig {
...
externalNativeBuild {
cmake {
cppFlags '-std=c++11'
}
ndk {
abiFilters "x86", "armeabi-v7a", "arm64-v8a"
}
}
}
- 编译相关工作会在CMakeLists.txt文件中配置。(ps:CMake不是本主题的重点所以暂时不细讲,后期做个专题)
1.2 为已有项目添加NDK编译
为已有项目添加NDK编译选项其实也就是上面两个配置。如果不需要设定额外参数只需在模块的build.gradle > android {} 中添加如下即可。
externalNativeBuild {
cmake {
path file('src/main/cpp/CMakeLists.txt')
version '3.18.1'
}
}
并把c/c++和CMakeLists.txt文件放到指定目录。推荐放在跟java同级目录中新建cpp目录。
为已有项目配置NDK编译后由于有之前的项目缓存,所以很大概率会出现找不到libxxx.so或者jni方法实现的问题。此时可以通过如下方法把缓存清理干净然后重新编译
- 删掉模块目录中build文件夹。例如:
app/build
- 依次点击
File>Invalidate Caches and Restart
来让IDE清理缓存 - 重启后点击
Build>Clean Project
- 再点击
Build > Refresh Linked C++ Project
- 再同步Gradle并Run 项目即可