Android向现有项目中配置NDK,androidndk
分享于 点击 11254 次 点评:195
Android向现有项目中配置NDK,androidndk
Android向现有项目中配置NDK
Java JNI介绍
JNI(Java Native Interface)java本地接口,用于java和C、C++交互。需要注意:
- JIN是java调用Native的一种特性。
- JIN属于java与ANdroid毫无关系。
Android NDK介绍
Android NDK(Native Development Kit)是安卓的一个开发工具包。用于快速开发C或者C++动态库,也就是通过NDK在Android使用JNI实现和C或者C++库的交互。
JNI和NDK的关系
JNI是实现的目的,NDK是在Android中实现JNI的手段,即在Android开发中,通过NDK从而实现JNI功能。
向现有项目添加 C/C++ 代码
cmake_minimum_required(VERSION 3.4.1)
- 通过add_library()向CMake添加原文和库
add_library( # 设置库名字
native-lib
# 制定创建库的类型
# SHARED是动态连接的并在 运行时加载
# STATIC库是链接其它目标时使用的目标文件存档
# MODULE库是没有链接到其他目标的插件,但可以在运行时使用类似dlopen的功能动态加载
#
SHARED
# 配置C文件的相对路径相对路径
src/main/cpp/native-lib.cpp )
- 为了确保CMake可以在编译的是定位你的标头文件需要配置include_directories()命令:
include_directories(src/main/cpp/include/)
- CMake命名规范:lib库名称.so
- 在java代码加载此库时,仍需要使用在CMake脚本中配置的库名字。
static {
System.loadLibrary(“native-lib”);
}
- 配置NDKAPI,通过find_library()配置要使用的NDK库。
find_library(
# 配置要使用的NKD API库这是一个日志库
log-lib
log )
- 通过target_link_libraries()配置库连接,确保能正常的使用库中的函数,并将预构建库关联到您自己的原生库。
target_link_libraries(
# 自己的库
native-lib
# 安卓的日志库
${log-lib} )
android {
...
defaultConfig {...}
buildTypes {...}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
}
指定可选配置,在模块级 build.gradle 文件的 defaultConfig {} 块中配置另一个 externalNativeBuild {} 块,为 CMake 或 ndk-build 指定可选参数和标志。
defaultConfig {
....
externalNativeBuild {
cmake {
cppFlags ""
}
}
}
- 使用 ndk.abiFilters只能ABI配置
android {
...
defaultConfig {
...
externalNativeBuild {
cmake {...}
// or ndkBuild {...}
}
ndk {
// Specifies the ABI configurations of your native
// libraries Gradle should build and package with your APK.
abiFilters 'x86', 'x86_64', 'armeabi', 'armeabi-v7a',
'arm64-v8a'
}
}
buildTypes {...}
externalNativeBuild {...}
}
当然需要在local.properties别走NDK目录:
ndk.dir=D\:\\你的目录\\SDK\\ndk-bundle
参考网站
- Android NDK安装配置
- Android:JNI 与 NDK到底是什么?(含实例教学)
- CMakeLists.txt配置最低版本
- 配置库文件
- CMake文档
- ABI
相关文章
- 暂无相关文章
用户点评