From c0af95869ca151c7f7342e55cc16258c9b101f61 Mon Sep 17 00:00:00 2001 From: Muzahidul Islam Date: Wed, 22 Jul 2026 17:20:11 +0600 Subject: [PATCH] [FSSDK-12682] Fix Jackson serializer NoClassDefFoundError when R8 obfuscates naming strategy fields Add consumer ProGuard rules to preserve Jackson PropertyNamingStrategies and PropertyNamingStrategy static field names. The core-api's JacksonSerializer uses reflection (getField("SNAKE_CASE")) to look up these fields, and R8 obfuscation renames them, crashing the DefaultJsonSerializer LazyHolder initializer. Co-Authored-By: Claude Opus 4.6 (1M context) --- proguard-rules.txt | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/proguard-rules.txt b/proguard-rules.txt index f0197f30..fa55cb66 100644 --- a/proguard-rules.txt +++ b/proguard-rules.txt @@ -40,6 +40,17 @@ -dontwarn com.fasterxml.jackson.** -dontwarn org.json.** +# Keep Jackson naming strategy fields accessed via reflection by the Java SDK core-api +# (DefaultJsonSerializer → JacksonSerializer → getSnakeCaseStrategy). +# Without this, R8 obfuscates the field names, causing NoClassDefFoundError at runtime +# when Jackson is on the classpath. +-keepclassmembers class com.fasterxml.jackson.databind.PropertyNamingStrategies { + public static *; +} +-keepclassmembers class com.fasterxml.jackson.databind.PropertyNamingStrategy { + public static *; +} + # Annotations -dontwarn javax.annotation.**