我需要为每个Android ABI有一个单独的CMakeLists.txt。我尝试使用产品风格来设置CMakeLists.txt的路径。但是我在从命令行运行./gradlew assembleDebug
或任何其他 gradle 命令时遇到以下错误。
找不到对象上参数 [CMakeLists.txt] 的方法路径 (( 类型 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()
实际上,您可能根本不需要单独的产品风味,而是使用拆分为每个 ABI 生成瘦 APK。