我需要为每个 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/