如何在Android Studio中无需JNI绑定创建Native(C++)共享库
纯原生C++共享库构建方案
完全不需要换回ndk-build,Android Studio搭配CMake即可实现无JNI绑定的纯原生共享库构建,操作步骤如下:
- 清理冗余代码:直接删除项目自动生成的JNI绑定相关C++文件(如默认的native-lib.cpp)以及Java侧的JNI调用代码,仅保留你自己的原生库源码即可,不存在必须保留JNI相关文件的强制限制。
- 调整CMakeLists.txt配置:仅将需要编译进共享库的自有源码加入
add_library配置,示例配置如下:
cmake_minimum_required(VERSION 3.22.1) project("your_lib_project") # 仅添加自有原生源码,不要引入JNI绑定相关的cpp文件 add_library( your_target_lib_name SHARED your_source_1.cpp your_source_2.cpp your_source_3.cpp ) # 按需添加依赖系统库,比如需要log输出时添加如下配置 find_library( log-lib log ) target_link_libraries( your_target_lib_name ${log-lib} )
- 调整Module级build.gradle配置:无需配置任何JNI绑定生成规则,按需设置编译参数即可,示例配置如下:
android { namespace "com.your.namespace" compileSdk 34 defaultConfig { minSdk 24 targetSdk 34 ndk { // 按需设置需要编译的ABI架构 abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86_64' } externalNativeBuild { cmake { cppFlags '-std=c++17' } } } externalNativeBuild { cmake { path file('src/main/cpp/CMakeLists.txt') version '3.22.1' } } }
- 产物获取:执行菜单栏
Build -> Make Module '你的模块名'即可,生成的.so文件输出路径为build/intermediates/cmake/[构建变体]/obj/[对应ABI]/,配套你整理的对外头文件即可提供给其他项目链接使用。
若你更习惯ndk-build的配置方式,也可以直接在build.gradle的externalNativeBuild节点配置ndkBuild指向你的Android.mk文件,两种方案都支持纯原生库构建,不存在强制依赖JNI代码的限制。
内容的提问来源于stack exchange,提问作者Ofer Goren
相关产品推荐
相关产品推荐

