android - 如何为每个 Android ABI 设置产品风格的 CmakeLists 路径?

标签 android cmake android-gradle-plugin

我需要为每个 Android ABI 准备一个单独的 CMakeLists.txt。我尝试使用产品 flavor 来设置 CMakeLists.txt 的路径。但是我在运行 ./gradlew assembleDebug 或命令行中的任何其他 gradle 命令时遇到以下错误。

Could not find method path() for arguments [CMakeLists.txt] on object of type com.android.build.gradle.internal.dsl.ExternalNativeCmakeOptions.

这是我在 build.gradle 中设置产品风格的方法。

productFlavors {
    arm64_v8a {
        ndk {
            abiFilters "arm64-v8a"
        }
        externalNativeBuild {
            cmake {
                path "CMakeLists.txt"
            }
        }
    }
    x86_64 {
        ndk {
            abiFilters "x86_64"
        }
        externalNativeBuild {
            cmake {
                path "CMakeLists.txt"
            }
        }
    }
}

注意 - 我最初将这些文件命名为“CMakeLists_arm64-v8a.txt”和“CMakeLists_x86_64.txt”。但那是失败的,所以尝试了相同的名字。

如何解决这个问题或是否有解决方法?

最佳答案

不,你不能为不同的风格和/或 ABI 使用不同的 CMakeLists.txt 路径,但你可以使用参数在你的 cmake 脚本中添加条件,例如像这样:

flavorDimensions "abi"
productFlavors {
    arm64_v8a {
        dimension "abi"
        ndk {
            abiFilters "arm64-v8a"
        }
        externalNativeBuild {
            cmake {
                arguments "-DFLAVOR=ARM"
            }
        }
    }
    x86_64 {
        dimension "abi"
        ndk {
            abiFilters "x86_64"
        }
        externalNativeBuild {
            cmake {
                arguments "-DFLAVOR=x86"
            }
        }
    }
}

现在您可以在 CMakeLists.txt 中查看:

if (FLAVOR STREQUAL 'ARM')
  include(arm.cmake)
endif()

但在您的情况下,您可以依赖 Android Studio 定义的参数,而不需要您自己的参数:

if (ANDROID_ABI STREQUAL 'arm64-v8a')
  include(arm.cmake)
endif()

实际上,您可能根本不需要单独的 productFlavor,而是使用splits 为每个 ABI 生成瘦 APK。

关于android - 如何为每个 Android ABI 设置产品风格的 CmakeLists 路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44025407/

相关文章:

java - 多个屏幕上的 View 组(控件)

c++ - 如何使用 cmake 管理多个构建目标配置

Android Studio 0.4.3 - 在根项目中找不到任务 'assemble'

android - 如何在AOSP中创建jar(SDK)?

java - 在 Android 中保存 ArrayList 的最简单方法是什么?

android - 在打开图像时解析来自 Android 中不同来源的 URI

c++ - 具有多个子目录的 CMake 未编译

cmake IMPORTED_LOCATION 生成器表达式调试版本

android - D8 : Program type already present: android. support.v4.media.MediaBrowserCompat$CustomActionCallback

android - 即时应用程序低于 4mb 困难。如何减小 apk 大小