You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android NDK:为不同CMake目标指定差异化编译参数

解决方案

有两种可行方式实现不同原生库的差异化编译配置,以下是具体操作:

方法一:在build.gradle中为每个目标单独配置参数

Android Gradle插件支持为不同原生目标分别指定编译参数,你可以拆分externalNativeBuild中的cmake块,为不同目标组配置对应参数:

修改后的build.gradle相关代码:

externalNativeBuild {
    // 为mali_info和adreno_info配置(继承项目minSdkVersion 16)
    cmake {
        targets 'mali_info', 'adreno_info'
        arguments "-DANDROID_ARM_NEON=TRUE" // 若这两个库不需要NEON,可移除该参数
    }
    // 单独为vulkan_info配置专属参数
    cmake {
        targets 'vulkan_info'
        arguments "-DANDROID_ARM_NEON=TRUE", "-DANDROID_PLATFORM=android-24"
    }
}

配置完成后,低版本兼容的两个库会使用项目默认的minSdkVersion 16编译,vulkan_info则强制使用android-24平台编译。

方法二:在CMakeLists.txt中针对目标设置编译属性

如果更倾向于在CMake层面控制,可以为vulkan_info单独指定Android平台版本,同时保留其他库的默认配置:

修改后的CMakeLists.txt相关代码:

cmake_minimum_required(VERSION 3.4.1)

add_library(
        adreno_info
        SHARED
        src/main/cpp/adreno_info.cpp
)
target_link_libraries(
        adreno_info
        log
)

add_library(
        mali_info
        SHARED
        src/main/cpp/mali_info.cpp
)
target_link_libraries(
        mali_info
        log
)

add_library(
        vulkan_info
        SHARED
        src/main/cpp/vulkan_info.cpp
)
# 为vulkan_info单独设置Android平台版本和NEON属性
set_target_properties(vulkan_info PROPERTIES
        ANDROID_PLATFORM "android-24"
        ANDROID_ARM_NEON TRUE
)
target_link_libraries(
        vulkan_info
        vulkan
        log
)

同时修改build.gradle,移除全局的-DANDROID_PLATFORM=android-24参数,避免影响其他库:

externalNativeBuild {
    cmake {              
        targets 'mali_info', 'adreno_info', 'vulkan_info'
        arguments "-DANDROID_ARM_NEON=TRUE" // 若仅vulkan_info需要NEON,可移除该全局参数,仅在CMake中为vulkan_info设置
    }
}

这种方式把编译配置细节放在CMake脚本中,更适合原生代码的统一管理。

内容的提问来源于stack exchange,提问作者flar2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 18:53:17