Android JNI 多.cpp,.c文件同时打包生成动态链接库

本文介绍了如何在Android开发中,使用CmakeLists配置文件自动化处理多个.cpp和.c源文件,避免手动添加每个文件,简化JNI项目的构建过程。通过示例展示了如何将所有文件打包成一个so库,并且解释了生成的库文件名以及如何在代码中加载。
摘要由CSDN通过智能技术生成

从Android支持JNI开始,越来越多的开发者使用jni开发,我们新建一个native工程时,android studio默认给工程生成了CmakeLists文件和简单的native-lib.cpp文件,CmakeLists文件下生成动态链接库的核心代码为

add_library( # Sets the name of the library.
             native-lib

             # Sets the library as a shared library.
             SHARED

             # Provides a relative path to your source file(s).
             native-lib.cpp )
target_link_libraries( # Specifies the target library.
                        native-lib

                       # Links the target library to the log library
                       # included in the NDK.
                       ${log-lib} )

有兴趣的同学可以新建一个工程看看,因为只有一个native-lib.cpp文件,所以这样写是没问题的。但是,在实际开发中,我们可能会有几十上百个.cpp文件,这时候如果还手动对每个文件添加,那是不是会非常繁琐呢,每次删除或者增加.cpp文件都要手动修改CmakeLists文件,作为程序员,完全无法容忍。

所以,接下来我们自己配置,将所有的.cpp,.c文件一起打包成一个so,当然,有需求的可以打包成多个so。不需要每次都修改CmakeLi

Android Studio 中使用 Gradle 构建工具进行编译和打包生成 .so 动态链接库,可以按照以下步骤进行: 1. 在 Android Studio 中创建一个 C/C++ 模块,选择 File -> New -> New Module -> C/C++ Library,然后按照向导设置模块名称、语言类型和支持的 ABI。 2. 在模块的 build.gradle 文件中,添加以下配置: ```groovy android { // 指定支持的 ABI,包括 armeabi-v7a、arm64-v8a、x86、x86_64 等 ndk { abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' } // 配置 CMakeLists.txt 文件路径 externalNativeBuild { cmake { path "CMakeLists.txt" } } } // 配置 CMake 版本 cmake { version "3.10.2" } ``` 3. 在模块的 src/main 目录下创建 jni 文件夹,并将 C/C++ 代码放入该文件夹中。 4. 在 jni 文件夹下创建 CMakeLists.txt 文件,并编写编译选项和链接选项,指定生成 .so 文件的名称和路径,以及引入其他依赖库等。例如: ```cmake # 设置编译选项 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") # 设置源文件路径 file(GLOB_RECURSE SOURCE_FILES "*.cpp") # 设置头文件路径 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) # 配置动态库输出路径和名称 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${PROJECT_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}) set(CMAKE_LIBRARY_OUTPUT_NAME "native-lib") # 引入其他依赖库 find_library(log-lib log) # 生成动态库 add_library(native-lib SHARED ${SOURCE_FILES}) target_link_libraries(native-lib ${log-lib}) ``` 5. 点击 Android Studio 工具栏中的 Build -> Make Project,进行编译和打包生成 .so 动态链接库。 6. 在模块的 build.gradle 文件中查看生成的 .so 文件路径,例如: ```groovy android { externalNativeBuild { cmake { path "CMakeLists.txt" } } sourceSets { main { jniLibs.srcDirs = ['src/main/jniLibs'] } } } ``` 以上就是在 Android Studio 中使用 Gradle 构建工具进行编译和打包生成 .so 动态链接库的步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值