~ knotless Search/
↑↓ move↵ open⇧↵ all results

grain.social/grain-android

1 collaborator
0
1
main
41 lines · 1.7 KB Raw History
# kotlinx.serialization
#
# The generated $$serializer classes are referenced only reflectively, so R8
# strips them without an explicit keep and every decode fails at runtime with a
# SerializationException — release-only, and invisible until the feed comes back
# empty on a signed build.
-keepattributes *Annotation*, InnerClasses
-dontnote kotlinx.serialization.**

-keep,includedescriptorclasses class social.grain.**$$serializer { *; }
-keepclassmembers class social.grain.** {
    *** Companion;
}
-keepclasseswithmembers class social.grain.** {
    kotlinx.serialization.KSerializer serializer(...);
}

# The models are the serialized surface; keep their fields so names survive.
-keep class social.grain.data.model.** { *; }
-keep class social.grain.data.api.** { *; }
-keep class social.grain.data.upload.GalleryDraft { *; }
-keep class social.grain.data.upload.GalleryDraft$* { *; }
-keep class social.grain.data.auth.StoredAccount { *; }

# OkHttp
-dontwarn okhttp3.**
-dontwarn okio.**

# H3 (com.uber:h3-android)
#
# libh3-java.so finds its Java side by name and the aar ships no consumer rules,
# so R8 is free to rename the very classes the native code looks up. JNI_OnLoad
# calls FindClass on `com/uber/h3core/util/LatLng` and
# `com/uber/h3core/exceptions/H3Exception`, and the 63 entry points are bound
# implicitly as `Java_com_uber_h3core_NativeMethods_*` — a rename breaks either
# path. What comes back is not an exception but a JNI abort: SIGABRT with
# "java_class == null in call to GetMethodID", which kills the process outright.
# LocationServices wraps H3 in runCatching precisely because it expects H3 to be
# absent on some devices, and that cannot catch a native abort.
-keep class com.uber.h3core.** { *; }
-dontwarn com.uber.h3core.**