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 动态库。你可以根据实际情况修改加载的动态库名称和文件。

相关推荐
APP出海25 分钟前
Google政策大更新:涉及金融(个人贷款),社交约会与游戏(未成年人相关),健康等所有类别App
android·游戏·金融·产品运营·产品经理
全栈软件开发2 小时前
音频在线剪切助手网页版源码
android·音视频
2501_915909062 小时前
Flutter 应用怎么加固,多工具组合的工程化实战(Flutter 加固/Dart 混淆/IPA 成品加固/Ipa Guard + CI)
android·flutter·ios·ci/cd·小程序·uni-app·iphone
qq_717410012 小时前
添加快速点击设置-关于设备-版本号弹出仿android13彩蛋
android
KdanMin2 小时前
Android MediaCodec 硬编解码实战:从Camera预览到H264流与回环渲染
android·开发语言
峰哥的Android进阶之路2 小时前
Android常见的内存性能优化场景解决方案
android·性能优化
清空mega2 小时前
第三章 Android常见界面控件
android·gitee
JoyCong19983 小时前
智能手机市场再次洗牌,远控何以成为数码生活新“连接器”?
android·智能手机·电脑·生活·远程工作·远程操作
锅拌饭4 小时前
IM 收件箱机制(三)
android
沐怡旸4 小时前
【底层机制】Android内存管理技术深度解析:PMEM、ION与DMA-BUF Heaps
android·面试