要在 Android JNI 开发中的 CMakeLists.txt 文件中根据不同渠道加载不同的动态库,可以通过在 build.gradle 中定义 productFlavors,并为每个 flavor 指定不同的 CMake 变量,然后在 CMakeLists.txt 中根据这些变量来加载对应的动态库。
-
首先,在 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。
-
在 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 动态库。你可以根据实际情况修改加载的动态库名称和文件。