From 3572f07005cba0754dcfc1976df2cde59d9114e9 Mon Sep 17 00:00:00 2001 From: Rafael Chagas Date: Fri, 22 Sep 2023 17:35:57 +0200 Subject: [PATCH] Export R8 rules to consumers Signed-off-by: Rafael Chagas --- build.gradle | 4 +- library/build.gradle | 9 +-- library/consumer-rules.pro | 116 +++++++++++++++++++++++++++++++++++++ library/proguard-rules.pro | 75 ------------------------ 4 files changed, 123 insertions(+), 81 deletions(-) create mode 100644 library/consumer-rules.pro diff --git a/build.gradle b/build.gradle index d271808..9ef050a 100644 --- a/build.gradle +++ b/build.gradle @@ -9,8 +9,8 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:8.1.0' - classpath 'com.google.gms:google-services:4.3.15' + classpath 'com.android.tools.build:gradle:8.1.1' + classpath 'com.google.gms:google-services:4.4.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/library/build.gradle b/library/build.gradle index 50c84c0..cbecfea 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -15,6 +15,7 @@ android { targetSdkVersion 33 vectorDrawables.useSupportLibrary = true testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + consumerProguardFiles 'consumer-rules.pro' } compileOptions { @@ -65,10 +66,10 @@ dependencies { implementation 'com.google.android.material:material:1.9.0' // Android architecture components - implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1' - implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.6.1' - implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.6.1' - implementation 'androidx.lifecycle:lifecycle-common-java8:2.6.1' + implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2' + implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.6.2' + implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.6.2' + implementation 'androidx.lifecycle:lifecycle-common-java8:2.6.2' // Google Play Services implementation 'com.google.android.gms:play-services-location:21.0.1' diff --git a/library/consumer-rules.pro b/library/consumer-rules.pro new file mode 100644 index 0000000..74a21b8 --- /dev/null +++ b/library/consumer-rules.pro @@ -0,0 +1,116 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile + +# Keep custom model classes +-keep class com.rtchagas.pingplacepicker.model.** { *; } +-dontnote com.rtchagas.pingplacepicker.model.** + +# Moshi + +# JSR 305 annotations are for embedding nullability information. +-dontwarn javax.annotation.** + +-keepclasseswithmembers class * { + @com.squareup.moshi.* ; +} + +-keep @com.squareup.moshi.JsonQualifier interface * + +# Enum field names are used by the integrated EnumJsonAdapter. +# Annotate enums with @JsonClass(generateAdapter = false) to use them with Moshi. +-keepclassmembers @com.squareup.moshi.JsonClass class * extends java.lang.Enum { + ; +} + +# The name of @JsonClass types is used to look up the generated adapter. +-keepnames @com.squareup.moshi.JsonClass class * + +# Retain generated JsonAdapters if annotated type is retained. +-if @com.squareup.moshi.JsonClass class * +-keep class <1>JsonAdapter { + (...); + ; +} +-if @com.squareup.moshi.JsonClass class **$* +-keep class <1>_<2>JsonAdapter { + (...); + ; +} + +-keep class kotlin.reflect.jvm.internal.impl.builtins.BuiltInsLoaderImpl + +-keepclassmembers class kotlin.Metadata { + public ; +} + +# Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java. +-dontwarn org.codehaus.mojo.animal_sniffer.* + +# Retrofit config +# Retrofit does reflection on generic parameters. InnerClasses is required to use Signature and +# EnclosingMethod is required to use InnerClasses. +-keepattributes Signature, InnerClasses, EnclosingMethod + +# Retrofit does reflection on method and parameter annotations. +-keepattributes RuntimeVisibleAnnotations, RuntimeVisibleParameterAnnotations + +# Keep annotation default values (e.g., retrofit2.http.Field.encoded). +-keepattributes AnnotationDefault + +# Retain service method parameters when optimizing. +-keepclassmembers,allowshrinking,allowobfuscation interface * { + @retrofit2.http.* ; +} + +# Ignore annotation used for build tooling. +-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement + +# Ignore JSR 305 annotations for embedding nullability information. +-dontwarn javax.annotation.** + +# Guarded by a NoClassDefFoundError try/catch and only used when on the classpath. +-dontwarn kotlin.Unit + +# Top-level functions that can only be used by Kotlin. +-dontwarn retrofit2.KotlinExtensions +-dontwarn retrofit2.KotlinExtensions$* + +# With R8 full mode, it sees no subtypes of Retrofit interfaces since they are created with a Proxy +# and replaces all potential values with null. Explicitly keeping the interfaces prevents this. +-if interface * { @retrofit2.http.* ; } +-keep,allowobfuscation interface <1> + +# Keep inherited services. +-if interface * { @retrofit2.http.* ; } +-keep,allowobfuscation interface * extends <1> + +# With R8 full mode generic signatures are stripped for classes that are not +# kept. Suspend functions are wrapped in continuations where the type argument +# is used. +-keep,allowobfuscation,allowshrinking class kotlin.coroutines.Continuation + +# R8 full mode strips generic signatures from return types if not kept. +-if interface * { @retrofit2.http.* public *** *(...); } +-keep,allowoptimization,allowshrinking,allowobfuscation class <3> + +# With R8 full mode generic signatures are stripped for classes that are not kept. +-keep,allowobfuscation,allowshrinking class retrofit2.Response diff --git a/library/proguard-rules.pro b/library/proguard-rules.pro index c5767f8..f1b4245 100644 --- a/library/proguard-rules.pro +++ b/library/proguard-rules.pro @@ -19,78 +19,3 @@ # If you keep the line number information, uncomment this to # hide the original source file name. #-renamesourcefileattribute SourceFile - -# Keep custom model classes --keep class com.rtchagas.pingplacepicker.model.** { *; } --dontnote class com.rtchagas.pingplacepicker.model.** - -# Moshi - -# JSR 305 annotations are for embedding nullability information. --dontwarn javax.annotation.** - --keepclasseswithmembers class * { - @com.squareup.moshi.* ; -} - --keep @com.squareup.moshi.JsonQualifier interface * - -# Enum field names are used by the integrated EnumJsonAdapter. -# Annotate enums with @JsonClass(generateAdapter = false) to use them with Moshi. --keepclassmembers @com.squareup.moshi.JsonClass class * extends java.lang.Enum { - ; -} - -# The name of @JsonClass types is used to look up the generated adapter. --keepnames @com.squareup.moshi.JsonClass class * - -# Retain generated JsonAdapters if annotated type is retained. --if @com.squareup.moshi.JsonClass class * --keep class <1>JsonAdapter { - (...); - ; -} --if @com.squareup.moshi.JsonClass class **$* --keep class <1>_<2>JsonAdapter { - (...); - ; -} - --keep class kotlin.reflect.jvm.internal.impl.builtins.BuiltInsLoaderImpl - --keepclassmembers class kotlin.Metadata { - public ; -} - -# Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java. --dontwarn org.codehaus.mojo.animal_sniffer.* - -# Retrofit config --dontnote retrofit2.Platform --dontwarn retrofit2.** --dontwarn okhttp3.** --dontwarn okio.** --keepattributes Exceptions - -# Retrofit does reflection on generic parameters. InnerClasses is required to use Signature and -# EnclosingMethod is required to use InnerClasses. --keepattributes Signature, InnerClasses, EnclosingMethod - -# Retain service method parameters when optimizing. --keepclassmembers,allowshrinking,allowobfuscation interface * { - @retrofit2.http.* ; -} - -# Ignore annotation used for build tooling. --dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement - -# Guarded by a NoClassDefFoundError try/catch and only used when on the classpath. --dontwarn kotlin.Unit - -# Top-level functions that can only be used by Kotlin. --dontwarn retrofit2.-KotlinExtensions - -# With R8 full mode, it sees no subtypes of Retrofit interfaces since they are created with a Proxy -# and replaces all potential values with null. Explicitly keeping the interfaces prevents this. --if interface * { @retrofit2.http.* ; } --keep,allowobfuscation interface <1>