Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to override defaultConfig abiFilters in buildTypes

abiFilters is set in android build.gradle defaultConfig block.

I'd like to exclude x86 from release buildType, but can't find an easy way to do it

Here is the 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"
        }
    }
}

Here is what I get:

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

Here is what I really want:

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

I'd like to keep a full abiFilters in the defautlConfig block

And specify ones in certain buildType


EDIT 1:

Yes, removing the defaultConfig and setting abiFilters in both debug & release block would work. But my question is how to utilize the defaultConfig

like image 958
Felix.D Avatar asked Nov 15 '18 14:11

Felix.D


3 Answers

Feeding a command line option, e.g. "no_x86"

  1. Add below to your app/build.gradle

    defaultConfig {
        ndk {
    
            ...
            if (project.hasProperty("no_x86")) {
                abiFilters "armeabi"
            } else {
                abiFilters "armeabi", "x86"
            }
    
            ...
        }
    }
    
  2. Use below command to generate the APKs without x86 ABI by feeding option no_x86 to the command.

    ./gradlew assemble -Pno_x86
    

    but don't feed option no_x86 to the command if you want to build APKs with x86 abi. As the defaultConfig is to keep a full abiFilters per your requirement.

    For certain buildType, you can invoke the corresponding build command by feeding or not feeding the -Pno_x86 property. E.g. ./gradlew assembleRelease -Pno_x86

Reference: https://stackoverflow.com/a/52980193/8034839

like image 198
shizhen Avatar answered Oct 31 '22 02:10

shizhen


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

productFlavors also would support dimension abi.

like image 31
Martin Zeitler Avatar answered Oct 31 '22 02:10

Martin Zeitler


Thanks to Martin, I found a workable solution from this:

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

I realize that adding wanted abi to debug is a workaround for removing unwanted abi for release

Works For Me

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

buildTypes {
    debug {
        ndk {
          //abiFilters "armeabi", "x86"
            abiFilters "x86"
        }
    }
    release {
        //ndk {
        //    abiFilters "armeabi"
        //}
   }
}
like image 32
Felix.D Avatar answered Oct 31 '22 01:10

Felix.D