android - 将架构信息从 gradlew 命令传递到 cmake

标签 android cmake android-ndk android-gradle-plugin

我有一个支持 4 种不同架构的 android 应用程序,即 armeabi-v7aarm64-v8ax86x86_64。我不希望为每个构建的 Android 构建这些架构中的每一个。我想通过 gradlew 命令将架构信息作为参数传递,以便跳过剩余架构的构建。我知道 -DANDROID_ABI 标志作为参数传递给 cmake 可以解决问题,但不确定如何通过 gradlew 命令将其作为参数传递?

defaultConfig {
    minSdkVersion 21
    targetSdkVersion 26

    externalNativeBuild {
        cmake {
            cppFlags "-frtti -fexceptions"
            arguments "-DANDROID_ABI=<<requested arch to built>>"
        }
    }
}

换句话说,如何将此信息从 gradlew 命令传递到 cmake?

最佳答案

技巧可以像下面这样:

android {   
    ...
    defaultConfig {
        externalNativeBuild {
            cmake {
                ...

                if (project.hasProperty("armeabi-v7a")) {
                    abiFilters 'armeabi-v7a'
                } else if (project.hasProperty("arm64-v8a")) {
                    abiFilters 'arm64-v8a'
                } else if (project.hasProperty("x86")) {
                    abiFilters 'x86'
                } else if (project.hasProperty("x86_64")) {
                    abiFilters 'x86_64'
                } else {
                    abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
                }
                ...
            }
        }
    }
}

在命令行中,您可以执行以下操作,例如只构建 abi armeabi-v7a

./gradlew externalNativeBuild -Parmeabi-v7a

关于android - 将架构信息从 gradlew 命令传递到 cmake,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55479984/

相关文章:

Android - 等待触摸事件

c++ - 如何使用命令行取消设置cmake中的变量?

android - 如何授予android shell 用户更多权限?

android - NDK 构建器 r15 找不到某些构建目标的 HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC 和 pthread_condattr_setclock;构建失败

c++ - 在 Windows 10 x64 上使用 Ninja 作为 MSYS2 + MinGW 的生成器

c++ - NDK - 图像阈值

android - 将图像从一个 Activity 传递到另一个 Activity

android - XML 行为从 Android 2.3 更改为 4.1?

android - 如何为 Android 抽屉导航添加与标题相邻的图标

ubuntu - 更改默认 CMake 版本,Ubuntu 14.04