Configure how R8 runs

The settings plugin lets you create execution profiles for the R8 tool, letting you configure how R8 runs so it doesn't slow down your build. Depending on the environment, you can use profiles to run R8 in a separate JVM process and set JVM arguments, such as maximum heap size.

Declare an execution profile

Apply the settings plugin, and then add the android block to the settings.gradle file. In this block, you can define different profiles and then set a default, as shown in the following example:

Kotlin

android {
    execution {
        profiles {
            create("server") {
                r8 {
                    runInSeparateProcess = true
                    jvmOptions += listOf("-Xms2048m", "-Xmx8192m", "-XX:+HeapDumpOnOutOfMemoryError")
                }
            }
            create("local") {
                r8 {
                    runInSeparateProcess = true
                    jvmOptions += listOf("-Xms256m", "-Xmx2048m", "-XX:+HeapDumpOnOutOfMemoryError")
                }
            }
            defaultProfile = "server"
        }
    }
}

Groovy

android {
    execution {
        profiles {
            register("server") {
                r8 {
                    runInSeparateProcess = true
                    jvmOptions += ["-Xms2048m", "-Xmx8192m", "-XX:+HeapDumpOnOutOfMemoryError"]
                }
            }
            register("local") {
                r8 {
                    runInSeparateProcess = true
                    jvmOptions += ["-Xms256m", "-Xmx2048m", "-XX:+HeapDumpOnOutOfMemoryError"]
                }
            }
            defaultProfile = "server"
        }
    }
}

Override the default profile

To override the current default execution profile, add the following property to the gradle.properties file.

android.settings.executionProfile=example-profile