R8 obfuscation runs with non-deterministic settings, preventing APK reproducibility. R8 v8.6.17 generates unique obfuscation mappings on each build (different `pg_map_hash`), resulting in 466,604 lines of bytecode differences across 1,128 files. All native Rust libraries (libbdk_flutter, libark_wallet, libboltz) compile identically — the issue is R8 only.
User stories
- As an open-source contributor or auditor, I want to reproduce the exact same APK from source, so I can verify the published binary matches the public code
Acceptance criteria
Test cases
Context
- Reported by WalletScrutiny (Danny Garcia)
- Options: disable R8 minification, use fixed obfuscation dictionary, or publish mapping files per release
R8 obfuscation runs with non-deterministic settings, preventing APK reproducibility. R8 v8.6.17 generates unique obfuscation mappings on each build (different `pg_map_hash`), resulting in 466,604 lines of bytecode differences across 1,128 files. All native Rust libraries (libbdk_flutter, libark_wallet, libboltz) compile identically — the issue is R8 only.
User stories
Acceptance criteria
Test cases
Context