diff --git a/android/proguard-android-optimize.pro b/android/proguard-android-optimize.pro new file mode 100644 index 00000000..e2095ad6 --- /dev/null +++ b/android/proguard-android-optimize.pro @@ -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 (...); +} diff --git a/android/proguard-rules-missing-classes.pro b/android/proguard-rules-missing-classes.pro new file mode 100644 index 00000000..dcaf39ce --- /dev/null +++ b/android/proguard-rules-missing-classes.pro @@ -0,0 +1,9 @@ +-dontwarn org.bouncycastle.jsse.BCSSLParameters +-dontwarn org.bouncycastle.jsse.BCSSLSocket +-dontwarn org.bouncycastle.jsse.provider.BouncyCastleJsseProvider +-dontwarn org.conscrypt.Conscrypt$Version +-dontwarn org.conscrypt.Conscrypt +-dontwarn org.conscrypt.ConscryptHostnameVerifier +-dontwarn org.openjsse.javax.net.ssl.SSLParameters +-dontwarn org.openjsse.javax.net.ssl.SSLSocket +-dontwarn org.openjsse.net.ssl.OpenJSSE diff --git a/android/proguard-rules.pro b/android/proguard-rules.pro new file mode 100644 index 00000000..1ea4feef --- /dev/null +++ b/android/proguard-rules.pro @@ -0,0 +1,26 @@ +# Keep `Companion` object fields of serializable classes. +# This avoids serializer lookup through `getDeclaredClasses` as done for named companion objects. +-if @kotlinx.serialization.Serializable class ** +-keepclassmembers class <1> { + static <1>$Companion Companion; +} + +# Keep `serializer()` on companion objects (both default and named) of serializable classes. +-if @kotlinx.serialization.Serializable class ** { + static **$* *; +} +-keepclassmembers class <2>$<3> { + kotlinx.serialization.KSerializer serializer(...); +} + +# Keep `INSTANCE.serializer()` of serializable objects. +-if @kotlinx.serialization.Serializable class ** { + public static ** INSTANCE; +} +-keepclassmembers class <1> { + public static <1> INSTANCE; + kotlinx.serialization.KSerializer serializer(...); +} + +# @Serializable and @Polymorphic are used at runtime for polymorphic serialization. +-keepattributes RuntimeVisibleAnnotations,AnnotationDefault diff --git a/build-logic/android-plugins/src/main/kotlin/dev/msfjarvis/aps/gradle/ApplicationPlugin.kt b/build-logic/android-plugins/src/main/kotlin/dev/msfjarvis/aps/gradle/ApplicationPlugin.kt index 65a1f874..ec92d41a 100644 --- a/build-logic/android-plugins/src/main/kotlin/dev/msfjarvis/aps/gradle/ApplicationPlugin.kt +++ b/build-logic/android-plugins/src/main/kotlin/dev/msfjarvis/aps/gradle/ApplicationPlugin.kt @@ -31,10 +31,10 @@ class ApplicationPlugin : Plugin { buildTypes { named("release") { - isMinifyEnabled = false + isMinifyEnabled = true setProguardFiles( listOf( - "proguard-android-optimize.txt", + "proguard-android-optimize.pro", "proguard-rules.pro", "proguard-rules-missing-classes.pro", ) diff --git a/gradle.properties b/gradle.properties index bc91470b..cb5416fa 100644 --- a/gradle.properties +++ b/gradle.properties @@ -24,7 +24,7 @@ kapt.include.compile.classpath=false android.injected.testOnly=false # Use R8 instead of ProGuard for code shrinking. -android.enableR8.fullMode=true +android.enableR8.fullMode=false # Enable AndroidX android.useAndroidX=true