From b3bb7c694b55fd2c65970abf528a25a38239385e Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Sun, 29 Mar 2020 10:50:47 +0530 Subject: [PATCH] build: Improve R8 rules and enable aggressive optimization modes Signed-off-by: Harsh Shandilya --- gradle.properties | 14 +++++++++++++ ui/build.gradle | 2 +- ui/proguard-android-optimize.txt | 36 ++++++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 ui/proguard-android-optimize.txt diff --git a/gradle.properties b/gradle.properties index 9e6fce10..8375129e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,3 +17,17 @@ org.gradle.jvmargs=-Xmx1536m # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true + +# R8 Full mode +android.enableR8.fullMode=true + +# https://jakewharton.com/increased-accuracy-of-aapt2-keep-rules/ +android.useMinimalKeepRules=true + +# Enable rudimentary R class namespacing where each library only contains +# references to the resources it declares instead of declarations plus all +# transitive dependency references. +android.namespacedRClass=true + +# Suppress warnings for some features that aren't yet stabilized +android.suppressUnsupportedOptionWarnings=android.enableR8.fullMode,android.useMinimalKeepRules,android.namespacedRClass,android.suppressUnsupportedOptionWarnings diff --git a/ui/build.gradle b/ui/build.gradle index e1d99604..2ebfc1af 100644 --- a/ui/build.gradle +++ b/ui/build.gradle @@ -57,7 +57,7 @@ android { } } minifyEnabled true - proguardFiles getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" + proguardFiles "proguard-android-optimize.txt", "proguard-rules.pro" } debug { applicationIdSuffix ".debug" diff --git a/ui/proguard-android-optimize.txt b/ui/proguard-android-optimize.txt new file mode 100644 index 00000000..e2095ad6 --- /dev/null +++ b/ui/proguard-android-optimize.txt @@ -0,0 +1,36 @@ +-allowaccessmodification +-dontpreverify +-dontusemixedcaseclassnames +-dontskipnonpubliclibraryclasses +-verbose + +-keepattributes *Annotation* + +-keepclasseswithmembernames class * { + native ; +} + +-keepclassmembers enum * { + public static **[] values(); + public static ** valueOf(java.lang.String); +} + +-keepclassmembers class * implements android.os.Parcelable { + public static final ** CREATOR; +} + +-keep class androidx.annotation.Keep + +-keep @androidx.annotation.Keep class * {*;} + +-keepclasseswithmembers class * { + @androidx.annotation.Keep ; +} + +-keepclasseswithmembers class * { + @androidx.annotation.Keep ; +} + +-keepclasseswithmembers class * { + @androidx.annotation.Keep (...); +}