Configuration of R8

To achieve maximum utilization of R8, the codebase must be configured correctly depending on the build script language (Kotlin DSL vs. Groovy DSL).

1. App Modules (com.android.application)

The app's build.gradle or build.gradle.kts file should enable minification and resource shrinking within the release build type or the apps custom build type for release and performance testing. It MUST use the optimized default file (proguard-android-optimize.txt).

Kotlin DSL (build.gradle.kts):

buildTypes {
   getByName("release") {
       isMinifyEnabled = true
       isShrinkResources = true
       proguardFiles(
           getDefaultProguardFile("proguard-android-optimize.txt"),
           "proguard-rules.pro"
       )
   }
}

Groovy DSL (build.gradle):

buildTypes {
   release {
       minifyEnabled = true
       shrinkResources = true
       proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
   }
}

2. gradle.properties Flags

Full Mode: R8 Full Mode enables the entire optimizations

  • AGP 8.0+: Enabled by default. Ensure android.enableR8.fullMode=false is NOT present.
  • Pre-AGP 8.0: Should be explicitly enabled with android.enableR8.fullMode=true.

Optimized Resource Shrinking: If the AGP version of the project is less than 9.0 and more than 8.6, explicitly enable the new resource shrinker:

android.r8.optimizedResourceShrinking=true