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

相关推荐
周杰伦的稻香6 小时前
MySQL中常见的慢查询与优化
android·数据库·mysql
他们叫我技术总监7 小时前
Python 列表、集合、字典核心区别
android·java·python
2401_8823515211 小时前
Flutter for OpenHarmony 商城App实战 - 地址编辑实现
android·java·flutter
42nf11 小时前
Android 根据platform.pk8和platform.x509.pem生成.jks文件
android·.pk8和.pem生成.jks
摘星编程12 小时前
React Native for OpenHarmony 实战:DisplayInfo 显示信息详解
android·react native·react.js
_李小白12 小时前
【Android 美颜相机】第六天:GPUImageView解析
android·数码相机
Mr_sun.13 小时前
Day04——权限认证-基础
android·服务器·数据库
北辰当尹15 小时前
第27天 安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞
android·安全·php
yueqc115 小时前
Android 线程梳理
android·线程
顾林海16 小时前
Android登录模块设计:别让“大门”变成“破篱笆”
android·经验分享·面试·架构·移动端