diff --git a/moshi/src/main/java/com/squareup/moshi/internal/Util.java b/moshi/src/main/java/com/squareup/moshi/internal/Util.java index b936764..05fe663 100644 --- a/moshi/src/main/java/com/squareup/moshi/internal/Util.java +++ b/moshi/src/main/java/com/squareup/moshi/internal/Util.java @@ -54,7 +54,7 @@ public final class Util { Class metadata = null; try { //noinspection unchecked - metadata = (Class) Class.forName("kotlin.Metadata"); + metadata = (Class) Class.forName(getKotlinMetadataClassName()); } catch (ClassNotFoundException ignored) { } METADATA = metadata; @@ -69,6 +69,11 @@ public final class Util { DEFAULT_CONSTRUCTOR_MARKER = defaultConstructorMarker; } + // Extracted as a method with a keep rule to prevent R8 from keeping Kotlin Metada + private static String getKotlinMetadataClassName() { + return "kotlin.Metadata"; + } + private Util() { } diff --git a/moshi/src/main/resources/META-INF/proguard/moshi.pro b/moshi/src/main/resources/META-INF/proguard/moshi.pro index c4cea38..ed2d9cb 100644 --- a/moshi/src/main/resources/META-INF/proguard/moshi.pro +++ b/moshi/src/main/resources/META-INF/proguard/moshi.pro @@ -14,3 +14,8 @@ ; **[] values(); } + +# Keep helper method to avoid R8 optimisation that would keep all Kotlin Metadata when unwanted +-keepclassmembers class com.squareup.moshi.internal.Util { + private static java.lang.String getKotlinMetadataClassName(); +}