I have a multi dimensional android gradle Project which takes long to build and long to test. I have a two dimensional flaver definition. the first dimensions has 2 project values , the second dimension has 4 environment definitions , and there are 3 build types.
this results in 2x4x3 = 24 build variants. I would like to optimize in a way, that just one build variant would be builded and only one build variant would be used for running the unittests in the ci-environment.
build.gradle
android {
// more configurations
flavorDimensions "project", "environment"
productFlavors {
basic {
dimension "project"
}
advanced {
dimension "project"
}
flavorDevelopment {
dimension "environment"
applicationId "ch.myproject.app.development"
}
flavorTest {
dimension "environment"
applicationId "ch.myproject.app.test"
}
flavorIntegration {
dimension "environment"
applicationId "ch.myproject.app.integration"
}
flavorProduction {
dimension "environment"
applicationId "ch.myproject.app.production"
}
buildTypes {
debug {
testCoverageEnabled = true
minifyEnabled = false
shrinkResources = false
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
debugInstantRun.initWith(buildTypes.debug)
debugInstantRun {
// we are changing this build variant later on runtime, so that it will use constant values
// for versionCode and versionName in the Manifest, for make sure the
// manifest is unchanged between the instantRun builds
// Specifies a sorted list of fallback build types that the
// plugin should try to use when a dependency does not include a
// "debugInstantRun" build type. You may specify as many fallbacks as you
// like, and the plugin selects the first build type that's
// available in the dependency.
matchingFallbacks = ['debug']
}
release {
// Currently all environments (dev/test/int/prod) are signed by the Production certificates
minifyEnabled = false
shrinkResources = false
}
}
// more configurations
} // end of android
I would previous clean everything,
gradlew clean --refresh-dependencies
then just assembling the Debug variants,
gradlew assembleDebug
and then I try running just the unittest on one debug variant:
gradlew testAdvancedFlavorDevelopmentDebugUnitTest
-> This does not work
if I run gradlew test
all the build variants are builded (exept Release build types) ,the tests are working but this takes ways to long!
also tried to gradlew testDebugUnitTest
-> does not work
I think I could move the unittests into another directory than test e.g testAdvancedFlavorDevelopment then when i would enter gradlew test
just the tests for testAdvancedFlavorDevelopmentDebug and testAdvancedFlavorDevelopmentDebugInstantRun would be started.
But there must be a way to let the tests be in the test directory and enforce by gradlew command to just to compile and unittest just one specific buildvariant! Any ideas?
tia luke
try ./gradlew :ModuleName:testVariantNameUnitTest, also you can find in the Gradle tab all the possible UnitTest tasks that you can execute.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With