支持 64 位在 build.gradle 中添加 ndk.abiFilters 时出错

Support to 64-bit gives error on adding ndk.abiFilters in build.gradle

大多数 android 开发人员必须从 Google 那里得到消息,要求在 2019 年 8 月之前更新应用程序以支持 64 位架构。此处提供了详细说明: Ensure that your app supports 64-bit devices

在我的应用程序中,我发现使用了 32 位库,因此我必须更新应用程序以支持 64 位架构。按照上面指南中的建议,我在 build.gradle 文件中添加了以下内容:

ndk.abiFilters = 'armeabi-v7a' 'arm64-v8a' 'x86' 'x86_64'

但是,之后,我在构建应用程序时遇到以下错误:

Error:(35, 0) Could not find method armeabi-v7a() for arguments [arm64-v8a] on DefaultConfig_Decorated{name=main, dimension=null, minSdkVersion=DefaultApiVersion{mApiLevel=16, mCodename='null'}, targetSdkVersion=DefaultApiVersion{mApiLevel=28, mCodename='null'}, renderscriptTargetApi=null, renderscriptSupportModeEnabled=null, renderscriptSupportModeBlasEnabled=null, renderscriptNdkModeEnabled=null, versionCode=3, versionName=1.2, applicationId=, testApplicationId=null, testInstrumentationRunner=null, testInstrumentationRunnerArguments={}, testHandleProfiling=null, testFunctionalTest=null, signingConfig=null, resConfig=null, mBuildConfigFields={}, mResValues={}, mProguardFiles=[], mConsumerProguardFiles=[], mManifestPlaceholders={}, mWearAppUnbundled=null} of type com.android.build.gradle.internal.dsl.DefaultConfig.

有人试过将应用程序更新到 64 位吗?知道如何解决这个问题吗?

根据NdkOptionsabiFilters定义为Set<String>

Set<String> abiFilters

在 groovy 中,Set 使用以下语法初始化(如果您想使用运算符 '='):

Set<String> mySet = ["armeabi-v7a", "arm64-v8a", "x86", "x86_64"] 

可以通过更新构建 gradle defaultConfig

来完成
defaultConfig {
    applicationId "my.test.64bitapp"
    minSdkVersion 15
    targetSdkVersion 26
    versionCode 42
    versionName "1.0.2"
    multiDexEnabled true
    vectorDrawables.useSupportLibrary = true
    ndk.abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86' ,'x86_64'
}

defaultConfig {
    applicationId "com.swypmedia"
    minSdkVersion 16
    targetSdkVersion 26
    versionCode 2
    versionName "2.0.2"
    ndk {
        abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86' ,'x86_64'
    }
}

我已经在 android-native 和 react-native 应用上测试过了。 构建成功,应用正常运行。

对于最新的 kotlin dsl

ndk {
     abiFilters.add("armeabi-v7a")
     abiFilters.add("arm64-v8a")
}