The Android Gradle plugin allows developers to build different kinds of their application. For example, the Android Gradle plugin automatically defines two build types: "debug" for local development and "release" for the production app that is uploaded to Google Play store.
build types: Represent different build configurations for the application that affects the Android build. The "debug" build type is optimized for local development and uses additional features (like Apply Changes). The used build type has a different impact on the Android build and the executed tasks. For more information go to the official documentation
product flavors: Represent different versions of the application. They can co-exist on the same device or in the Google Play store. For example, customers could use the product flavors "free" and "paid" to generate two apps for the Google Play store. It is also possible to define multiple dimensions. For more information go to the official documentation
(build) variants: Represent the actual (and internal) version of the application. It is generated by the Android Gradle plugin based on the selected product flavor(s) and build type. The name of the variant is always "<productFlavorDimension1><productFlavorDimension2>...<buildType>". For example, the product flavor "demo" and the build type "debug" will generate the build variant "demoDebug". For more information go to the official documentation
Note: this topic is important for the Dynatrace Android Gradle plugin, because the Android build variant determines which variant-specific configuration is executed.