美文网首页
NDK开发工程目录和配置

NDK开发工程目录和配置

作者: 给我一支白沙 | 来源:发表于2019-11-26 15:49 被阅读0次

NDK开发工程目录和配置

文件目录

工程目录

C/C++文件存放目录

  1. 存放C++ 文件 放入main目录下的cpp即可(默认)

Workspace\app\src\main\cpp

  1. 指向自定义目录(android{}节点下)
    //文件映射关系
    sourceSets {
        main {//表示为main
            jni.srcDirs =["src/main/cpp"] 
        }
    }

so 文件存放目录

  1. 存放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 目录

  1. jniLibs指向已经其他目录(android{}节点下)
    //文件映射关系
    sourceSets {
        main {//表示为main
            jniLibs.srcDirs = ['libs'] //so文件的目录指向libs文件夹
        }
    }

gradle配置

配置输出的.so架构类型

  1. 可以通过app下的build.gradle来指定编译的.so类型
  2. 现在只有四种,其他类型都已舍弃'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
android {
    defaultConfig {
        externalNativeBuild {
            cmake {
                abiFilters  'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
            }
        }
    }

CMakeLists路径配置

  1. 配置CMakeLists 通过app下的build.gradle来指定路径
android {
       externalNativeBuild {
        cmake {
            path "src/main/cpp/CMakeLists.txt"
            version "3.10.2"
        }
    }
    }

CMake 配置

  1. 打印日志message("hello world") message("SRC_LIST is " ${SRC_LIST}) 打印的日志在project\app.cxx\cmake\debug\arm64-v8a\build_output.txt 中查看

  2. 编译头文件 include_directories(include)

  3. 定义全局变量 FILE(GLOB SRC_LIST "${PROJECT_SOURCE_DIR}/*.cpp") , 将当前目录下的所有cpp 文件赋值给SRC_LIST 可指定文件 也可以指定目录

  4. 定义全局变量 aux_source_directory(${PROJECT_SOURCE_DIR}/ SRC_LIST) 将当前目录下的所有文件赋值给SRC_LIST 只可指定目录

  5. 添加动态链接库

    • 外部导入的库
      add_library(libopus SHARED IMPORTED)

    • 生成动态库 libnative-lib.so
      add_library(native-lib SHARED native-lib.cpp)

  6. 设置动态库so文件路径

set_target_properties(libopus PROPERTIES IMPORTED_LOCATION 
       ${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/libopus.so)
  1. 添加静态库 add_library(mod2 STATIC mod2.c) # 生成静态库 libmod2.a
  2. 将目标文件与库文件进行链接
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})

相关文章

网友评论

      本文标题:NDK开发工程目录和配置

      本文链接:https://www.haomeiwen.com/subject/ltiewctx.html