Vin*_*arg 6 android cmake android-gradle-plugin
我需要为每个Android ABI分别设置一个CMakeLists.txt.我尝试使用产品flavor来设置CMakeLists.txt的路径.但是我./gradlew assembleDebug从命令行运行或任何其他gradle命令时遇到以下错误.
无法在com.android.build.gradle.internal.dsl.ExternalNativeCmakeOptions类型的对象上找到参数[CMakeLists.txt]的方法path().
以下是我在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"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
注 - 我最初将文件命名为"CMakeLists_arm64-v8a.txt"和"CMakeLists_x86_64.txt".但那失败了,所以尝试了相同的名字.
如何解决这个问题还是有解决方法?
不,您不能CMakeLists.txt为不同的样式和/或ABI使用不同的路径,但是可以使用参数在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"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以在CMakeLists.txt中进行检查:
if (FLAVOR STREQUAL 'ARM')
include(arm.cmake)
endif()
Run Code Online (Sandbox Code Playgroud)
但是在您的情况下,您可以依赖于Android Studio定义的参数,不需要您自己的参数:
if (ANDROID_ABI STREQUAL 'arm64-v8a')
include(arm.cmake)
endif()
Run Code Online (Sandbox Code Playgroud)
实际上,您可能根本不需要单独的productFlavor,而是使用拆分为每个ABI生成精简的APK。
| 归档时间: |
|
| 查看次数: |
1577 次 |
| 最近记录: |