NDK開(kāi)發(fā)工程目錄和配置
文件目錄
C/C++文件存放目錄
- 存放C++ 文件 放入main目錄下的cpp即可(默認(rèn))
Workspace\app\src\main\cpp
- 指向自定義目錄(android{}節(jié)點(diǎn)下)
//文件映射關(guān)系
sourceSets {
main {//表示為main
jni.srcDirs =["src/main/cpp"]
}
}
so 文件存放目錄
- 存放so文件,直接在main目錄下 創(chuàng)建
jniLibs
即可(默認(rèn))
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指向已經(jīng)其他目錄(android{}節(jié)點(diǎn)下)
//文件映射關(guān)系
sourceSets {
main {//表示為main
jniLibs.srcDirs = ['libs'] //so文件的目錄指向libs文件夾
}
}
gradle配置
配置輸出的.so架構(gòu)類(lèi)型
- 可以通過(guò)app下的build.gradle來(lái)指定編譯的.so類(lèi)型
- 現(xiàn)在只有四種,其他類(lèi)型都已舍棄'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
android {
defaultConfig {
externalNativeBuild {
cmake {
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
}
}
}
CMakeLists路徑配置
- 配置CMakeLists 通過(guò)app下的build.gradle來(lái)指定路徑
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")
褂傀, 將當(dāng)前目錄下的所有cpp 文件賦值給SRC_LIST 可指定文件 也可以指定目錄定義全局變量
aux_source_directory(${PROJECT_SOURCE_DIR}/ SRC_LIST)
將當(dāng)前目錄下的所有文件賦值給SRC_LIST 只可指定目錄-
添加動(dòng)態(tài)鏈接庫(kù)
外部導(dǎo)入的庫(kù)
add_library(libopus SHARED IMPORTED)
生成動(dòng)態(tài)庫(kù) libnative-lib.so
add_library(native-lib SHARED native-lib.cpp)
設(shè)置動(dòng)態(tài)庫(kù)so文件路徑
set_target_properties(libopus PROPERTIES IMPORTED_LOCATION
${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/libopus.so)
- 添加靜態(tài)庫(kù)
add_library(mod2 STATIC mod2.c) # 生成靜態(tài)庫(kù) libmod2.a
- 將目標(biāo)文件與庫(kù)文件進(jìn)行鏈接
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})