NDK开发工程目录和配置
文件目录
工程目录C/C++文件存放目录
- 存放C++ 文件 放入main目录下的cpp即可(默认)
Workspace\app\src\main\cpp
- 指向自定义目录(android{}节点下)
//文件映射关系
sourceSets {
main {//表示为main
jni.srcDirs =["src/main/cpp"]
}
}
so 文件存放目录
- 存放so文件,直接在main目录下 创建
jniLibs
即可(默认)
Workspace\app\src\main\jniLibs
Workspace\app\src\main\jniLibs\arm64-v8a // arm64-v8a 目录
Workspace\app\src\main\jniLibs\armeabi-v7a //armeabi-v7a 目录
Workspace\app\src\main\jniLibs\x86 //x86 目录
Workspace\app\src\main\jniLibs\x86_64 //x86_64 目录
- jniLibs指向已经其他目录(android{}节点下)
//文件映射关系
sourceSets {
main {//表示为main
jniLibs.srcDirs = ['libs'] //so文件的目录指向libs文件夹
}
}
gradle配置
配置输出的.so架构类型
- 可以通过app下的build.gradle来指定编译的.so类型
- 现在只有四种,其他类型都已舍弃'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
android {
defaultConfig {
externalNativeBuild {
cmake {
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
}
}
}
CMakeLists路径配置
- 配置CMakeLists 通过app下的build.gradle来指定路径
android {
externalNativeBuild {
cmake {
path "src/main/cpp/CMakeLists.txt"
version "3.10.2"
}
}
}
CMake 配置
-
打印日志
message("hello world")
message("SRC_LIST is " ${SRC_LIST})
打印的日志在project\app.cxx\cmake\debug\arm64-v8a\build_output.txt 中查看 -
编译头文件
include_directories(include)
-
定义全局变量
FILE(GLOB SRC_LIST "${PROJECT_SOURCE_DIR}/*.cpp")
, 将当前目录下的所有cpp 文件赋值给SRC_LIST 可指定文件 也可以指定目录 -
定义全局变量
aux_source_directory(${PROJECT_SOURCE_DIR}/ SRC_LIST)
将当前目录下的所有文件赋值给SRC_LIST 只可指定目录 -
添加动态链接库
-
外部导入的库
add_library(libopus SHARED IMPORTED)
-
生成动态库 libnative-lib.so
add_library(native-lib SHARED native-lib.cpp)
-
-
设置动态库so文件路径
set_target_properties(libopus PROPERTIES IMPORTED_LOCATION
${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/libopus.so)
- 添加静态库
add_library(mod2 STATIC mod2.c) # 生成静态库 libmod2.a
- 将目标文件与库文件进行链接
target_link_libraries(
native-lib
libopus
${log-lib})
示例
//CMakeLists.txt文件
cmake_minimum_required(VERSION 3.4.1)
include_directories(include)
aux_source_directory(${PROJECT_SOURCE_DIR}/ SRC_LIST)
FILE(GLOB SRC_LIST "${PROJECT_SOURCE_DIR}/*.cpp")
message("SRC_LIST is " ${SRC_LIST})
message("hello world")
add_library(libopus
SHARED
IMPORTED)
set_target_properties(libopus
PROPERTIES IMPORTED_LOCATION
${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/libopus.so)
add_library(
native-lib
SHARED
native-lib.cpp)
find_library(
log-lib
log)
target_link_libraries(
native-lib
libopus
${log-lib})
网友评论