如何覆盖 buildTypes 中的 defaultConfig abiFilters

Fel*_*x.D 4 android gradle android-gradle-plugin

abiFilters在 android build.gradledefaultConfig 块中设置。

我想x86从发布 buildType 中排除,但找不到简单的方法来做到这一点

这是build.gradle

defaultConfig {
    ndk {
        abiFilters "armeabi", "x86"
        moduleName "cipher_v1"
        cFlags "-DRELEASE=1"
        if (rootProject.ext.has("testCrack")) {
            cFlags += " -DTEST_CRACK"
        }
        if (project.ext.has("authKey") && project.ext.has("androidId")) {
            cFlags += "-DAUTH_KEY=\\\"" + project.ext.authKey + "\\\""
            "-DANDROID_ID=\\\"" + project.ext.androidId + "\\\""
        }
    }
}

buildTypes {
   release {
        ndk {
            abiFilters "armeabi"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我得到的:

unzip -l base-release.aar|grep cipher
17752  02-01-1980 00:00   jni/armeabi/libcipher_v1.so
17640  02-01-1980 00:00   jni/x86/libcipher_v1.so
Run Code Online (Sandbox Code Playgroud)

这是我真正想要的:

unzip -l base-release.aar|grep cipher
17752  02-01-1980 00:00   jni/armeabi/libcipher_v1.so
Run Code Online (Sandbox Code Playgroud)

我想保留一个完整abiFiltersdefautlConfig

并在某些指定的 buildType


编辑 1:

是的,移除defaultConfig和设置abiFilters在两个debugrelease块会工作。但我的问题是如何利用defaultConfig

shi*_*hen 5

提供命令行选项,例如“ no_x86

  1. 在下面添加到您的 app/build.gradle

    defaultConfig {
        ndk {
    
            ...
            if (project.hasProperty("no_x86")) {
                abiFilters "armeabi"
            } else {
                abiFilters "armeabi", "x86"
            }
    
            ...
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用以下命令通过向命令提供选项来生成没有x86 ABI的 APK no_x86

    ./gradlew assemble -Pno_x86
    
    Run Code Online (Sandbox Code Playgroud)

    no_x86如果您想使用x86 abi构建 APK 请不要向命令提供选项。因为这defaultConfig是根据您的要求保留完整的 abiFilters 。

    对于某些buildType,您可以通过提供或不提供-Pno_x86属性来调用相应的构建命令。例如./gradlew assembleRelease -Pno_x86

参考: https : //stackoverflow.com/a/52980193/8034839