Android CMakeLists.txt不同渠道加载对应目录动态库

要在 Android JNI 开发中的 CMakeLists.txt 文件中根据不同渠道加载不同的动态库,可以通过在 build.gradle 中定义 productFlavors,并为每个 flavor 指定不同的 CMake 变量,然后在 CMakeLists.txt 中根据这些变量来加载对应的动态库。

  1. 首先,在 build.gradle 文件中定义 productFlavors 并为每个 flavor 指定对应的 CMake 变量

    复制代码
     android {
         ...
         flavorDimensions "channel"
         
     	sourceSets {
             flavor1 {
                 jniLibs.srcDirs = ['src/main/jniLibs_flavor1']
             }
             flavor2 {
                 jniLibs.srcDirs = ['src/main/jniLibs_flavor2']
             }
         }
    
         productFlavors {
             flavor1 {
                 dimension "channel"
                 externalNativeBuild {
                     cmake {
                         arguments "-DCHANNEL=flavor1"
                     }
                 }
             }
             flavor2 {
                 dimension "channel"
                 externalNativeBuild {
                     cmake {
                         arguments "-DCHANNEL=flavor2"
                     }
                 }
             }
         }
     }

为两个不同的 productFlavors 定义了对应的 CMake 变量。根据不同的 flavor,会传递不同的标志给 CMake。

  1. 在 CMakeLists.txt 文件中,可以根据这些变量来选择加载不同的动态库

    复制代码
     if (${CHANNEL} STREQUAL "flavor1")
         set(CMAKE_ANDROID_NATIVE_LIB_DIRECTORIES ${CMAKE_SOURCE_DIR}/../jniLibs_flavor1)
     elseif (${CHANNEL} STREQUAL "flavor2")
         set(CMAKE_ANDROID_NATIVE_LIB_DIRECTORIES ${CMAKE_SOURCE_DIR}/../jniLibs_flavor2)
     endif()
     
     set_target_properties(
         test# 库的名称
         PROPERTIES IMPORTED_LOCATION # 表示当前库是导入的方式
         ${CMAKE_ANDROID_NATIVE_LIB_DIRECTORIES}/${ANDROID_ABI}/libtest.so# so 动态库的具体路径
     )

根据 FLAVOR1 和 FLAVOR2 变量的设置,选择加载不同的 native-lib 动态库。你可以根据实际情况修改加载的动态库名称和文件。

相关推荐
liang_jy16 小时前
Android 事件分发机制(二)—— 点击事件透传
android·面试·源码
圆号本昊19 小时前
Flutter Android Live2D 2026 实战:模型加载 + 集成渲染 + 显示全流程 + 10 个核心坑( OpenGL )
android·flutter·live2d
冬奇Lab20 小时前
ANR实战分析:一次audioserver死锁引发的系统级故障排查
android·性能优化·debug
冬奇Lab20 小时前
Android车机卡顿案例剖析:从Binder耗尽到单例缺失的深度排查
android·性能优化·debug
ZHANG13HAO21 小时前
调用脚本实现 App 自动升级(无需无感、允许进程中断)
android
圆号本昊1 天前
【2025最新】Flutter 加载显示 Live2D 角色,实战与踩坑全链路分享
android·flutter
小曹要微笑1 天前
MySQL的TRIM函数
android·数据库·mysql
mrsyf1 天前
Android Studio Otter 2(2025.2.2版本)安装和Gradle配置
android·ide·android studio
DB虚空行者1 天前
MySQL恢复之Binlog格式详解
android·数据库·mysql