当工程需要C/C++介入时,Android项目就用到了NDK(Native Development Kit)开发
分两种情况
1.创建新工程
2.现有项目新添加NDK开发
使用Android studio创建项目时,可以选择NDK开发项目,编辑器会自动帮你配置好环境,同时还会有一个示例代码,步骤如下:
创建完成后,项目目录结构如下
默认在main目录下创建了一个cpp,用来存放C++代码,同时关键的CmakeLists.txt文件也在这里
CmakeLists文件必须是这个名字,固定死的,内容如下
add_library( # 设置so库的名称,随意起名
myndkapplication
# 设置lib的权限.
SHARED
# 关连c++文件.这里必须是绝对路径,跟标签是CMakeLists.txt存放位置,由于此时位置和native-lib.cpp同级,所以这里直接名称即可
native-lib.cpp)
关键的是add_library, 后面两个是使用Android库时候需要用的,这里是关连的log库,使用的不多,log足以,不做解释
生成的native-lib.cpp文件就是编写原生代码C++文件
使用方式:
先静态导入so库
companion object {
// Used to load the 'myndkapplication' library on application startup.
init {
System.loadLibrary("myndkapplication")
}
}
库名称就是在CmakeLists文件里自己定义的名称
然后定义native方法
external fun stringFromJNI(): String
这里是用kotlin定义的,下面是java定义方法
public static native String stringFromJNI();
然后就可以在Android的代码里直接调用native方法了
后续需要添加什么方法,同样的流程
比如 定义一个getUserName方法,首先定义native方法
先在Android代码里定义,然后点击alt+enter快捷键,自动创建C++方法
首先用cmakelists配置log库,默认已经配置好了
代码里增加变量定义
##编译目标架构的配置
这样编译后会在build的缓存里生成对应架构的so文件
如果现有非NDK项目想介入C++代码,首先要配置开发环境
创建CMakeLists.txt文件
文件名必须是这个名字,位置放在app目录下的任意位置,不过gradle配置的时候路径要和这里的存放位置对应
这里放在app同级目录下
externalNativeBuild {
cmake {
path = file("CMakeLists.txt")
}
}
如果CMakeLists.txt放在src目录下则为
externalNativeBuild {
cmake {
path = file("src/CMakeLists.txt")
}
}
创建c++ class文件
这里在main下创建一个cpp目录,然后把c++文件放入该目录
CMakeLists文件里编写配置信息
cmake_minimum_required(VERSION 3.10.2)//添加版本
add_library(
myndkapp//自己定义的名称
SHARED//so的类型
src/main/cpp/firstNdk.cpp
)
环境配置好后就是编写c++方法了,上面有介绍,不重复