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

问题描述 投票:5回答:1

我需要为每一个Android ABI单独的CMakeLists.txt。我试图用产品的风味来设置的CMakeLists.txt路径。但我上运行./gradlew assembleDebug或命令行中的任何其他gradle这个命令得到下面的错误。

找不到有关类型com.android.build.gradle.internal.dsl.ExternalNativeCmakeOptions的对象参数[的CMakeLists.txt]方法路径()。

下面是我如何设定在的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”。但是,这是失败所以尝试相同的名称。

如何解决这个问题还是有解决方法吗?

android cmake android-gradle
1个回答
6
投票

不,你不能有不同的口味和/或不同的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()

其实,你可能不需要单独productFlavors可言,而是用拆分生产薄的APK每个ABI。

© www.soinside.com 2019 - 2024. All rights reserved.