如何在buildTypes中覆盖defaultConfig abiFilters

时间:2018-11-15 14:56:08

标签: android gradle android-gradle

abiFilters是在Android build.gradle defaultConfig块中设置的。

我想从发布buildType中排除x86,但找不到简便的方法

这里是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"
        }
    }
}

这就是我得到的:

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

这就是我真正想要的:

unzip -l base-release.aar|grep cipher
17752  02-01-1980 00:00   jni/armeabi/libcipher_v1.so

我想在abiFilters块中保留完整的defautlConfig

并在某些buildType

中指定一个

编辑1:

是的,删除defaultConfigabiFilters块中的debug并将release设置为可行。但是我的问题是如何利用defaultConfig

3 个答案:

答案 0 :(得分:0)

android {
    buildTypes {
        debug {
            ndk {
                abiFilters "armeabi", "x86"
            }
        }
        release {
            ndk {
                abiFilters "armeabi"
            }
        }
    }
}

productFlavors也将支持尺寸abi

答案 1 :(得分:0)

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

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

    defaultConfig {
        ndk {
    
            ...
            if (project.hasProperty("no_x86")) {
                abiFilters "armeabi"
            } else {
                abiFilters "armeabi", "x86"
            }
    
            ...
        }
    }
    
  2. 使用以下命令通过将选项no_x86输入命令来生成不包含 x86 ABI的APK。

    ./gradlew assemble -Pno_x86
    

    但如果您要使用 x86 abi构建 APK,请不要向命令提供选项no_x86。由于defaultConfig会根据您的要求保留完整的abiFilters。

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

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

答案 2 :(得分:0)

感谢马丁,我从中找到了一个可行的解决方案:

when defaultConfig would only have armeabi configured and build-type debug would then add x86, this might work out

我意识到adding wanted abi to debugremoving unwanted abi for release的一种解决方法

为我工作

defaultConfig {
    ndk {
      //abiFilters "armeabi", "x86"
        abiFilters "armeabi"
    }
}

buildTypes {
    debug {
        ndk {
          //abiFilters "armeabi", "x86"
            abiFilters "x86"
        }
    }
    release {
        //ndk {
        //    abiFilters "armeabi"
        //}
   }
}