繁体   English   中英

如何为每个Android ABI设置产品风味中的CmakeLists路径?

[英]How to set CmakeLists path in product flavor for each Android ABI?

我需要为每个Android ABI分别设置一个CMakeLists.txt。 我尝试使用产品flavor来设置CMakeLists.txt的路径。 但是我在./gradlew assembleDebug运行./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"
            }
        }
    }
}

注 - 我最初将文件命名为“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 ,而是使用拆分为每个ABI生成精简APK。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM