美文网首页
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