From bcee3049da9ccc3806519611d463abb1b3d767cc Mon Sep 17 00:00:00 2001 From: Ovi Trif Date: Wed, 26 Aug 2026 22:17:09 +0200 Subject: [PATCH 1/3] fix: keep JNA FieldOrder annotations under R8 R8 full mode stripped @Structure.FieldOrder from UniFFI structs. Keep the annotation type and annotated classes so JNA can still lay out the structs. --- bindings/android/consumer-rules.pro | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/bindings/android/consumer-rules.pro b/bindings/android/consumer-rules.pro index 7aca292..0514368 100644 --- a/bindings/android/consumer-rules.pro +++ b/bindings/android/consumer-rules.pro @@ -21,8 +21,14 @@ native ; } -# @Structure.FieldOrder is read at runtime. +# JNA reads Structure.FieldOrder at runtime. R8 full mode strips that +# annotation unless the annotation type and annotated classes are kept. -keepattributes RuntimeVisibleAnnotations +-keep,allowshrinking,allowoptimization class com.sun.jna.Structure$FieldOrder +-keep,allowshrinking,allowoptimization,allowobfuscation @com.sun.jna.Structure$FieldOrder class com.synonym.vssclient.** { + ; + (...); +} # JNA's AAR references desktop AWT types that are absent on Android. -dontwarn java.awt.Component From 5b0cf86292fb4afede33e7dc4a6a1df51156e5f2 Mon Sep 17 00:00:00 2001 From: Ovi Trif Date: Thu, 27 Aug 2026 01:47:27 +0200 Subject: [PATCH 2/3] fix: keep JNA types in Android consumer rules Ship FieldOrder and com.sun.jna.* keeps in the AAR. Library publish only checks that proguard.txt is packaged; minified-app R8 belongs in the consuming app. --- bindings/android/consumer-rules.pro | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/bindings/android/consumer-rules.pro b/bindings/android/consumer-rules.pro index 0514368..a516308 100644 --- a/bindings/android/consumer-rules.pro +++ b/bindings/android/consumer-rules.pro @@ -30,6 +30,13 @@ (...); } +# libjnidispatch looks up Native/Structure/CallbackReference members by JNI name. +# Subclasses such as com.sun.jna.ptr.IntByReference are kept by the extends rules. +# See https://github.com/java-native-access/jna/blob/master/www/FrequentlyAskedQuestions.md#jna-on-android +-keep class com.sun.jna.* { *; } +-keep class * extends com.sun.jna.* { *; } +-keepclassmembers class * extends com.sun.jna.* { public *; } + # JNA's AAR references desktop AWT types that are absent on Android. -dontwarn java.awt.Component -dontwarn java.awt.GraphicsEnvironment From 360dfb1cb54b2d4bbb5b1d00bff9bdeedababa2f Mon Sep 17 00:00:00 2001 From: Ovi Trif Date: Thu, 27 Aug 2026 01:56:39 +0200 Subject: [PATCH 3/3] chore: bump to 0.5.25 and regenerate bindings --- CHANGELOG.md | 5 +++++ Cargo.lock | 2 +- Cargo.toml | 2 +- Package.swift | 4 ++-- bindings/android/gradle.properties | 2 +- 5 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..de82775 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## 0.5.25 - 2026-08-27 + +- Add keep consumer rules for JNA types UniFFI needs under R8. diff --git a/Cargo.lock b/Cargo.lock index fadd3d7..48c55e1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2013,7 +2013,7 @@ dependencies = [ [[package]] name = "vss-rust-client-ffi" -version = "0.5.24" +version = "0.5.25" dependencies = [ "bip39", "bitcoin", diff --git a/Cargo.toml b/Cargo.toml index a82da74..17a463f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "vss-rust-client-ffi" -version = "0.5.24" +version = "0.5.25" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/Package.swift b/Package.swift index 0b4b95f..4e7bfcd 100644 --- a/Package.swift +++ b/Package.swift @@ -3,8 +3,8 @@ import PackageDescription -let tag = "v0.5.24" -let checksum = "655f78dfce27e58ae37ab448e03d36186182cc9066d7bcf0341a5e6787330b7a" +let tag = "v0.5.25" +let checksum = "543245da55335b3db3656e2c7765ef96948d01ca2e3b5903dc35e3990319bd4e" let url = "https://github.com/synonymdev/vss-rust-client-ffi/releases/download/\(tag)/VssRustClientFfi.xcframework.zip" let package = Package( diff --git a/bindings/android/gradle.properties b/bindings/android/gradle.properties index b241cfb..3a15e0f 100644 --- a/bindings/android/gradle.properties +++ b/bindings/android/gradle.properties @@ -3,4 +3,4 @@ android.useAndroidX=true android.nonTransitiveRClass=true kotlin.code.style=official # project settings: -version=0.5.24 +version=0.5.25