What
On a multi-ABI koolbase release with --obfuscate --split-debug-info=<dir under build/>, the flutter clean run between ABIs deletes build/, taking the first ABI's symbol map with it. The release ships with only the last ABI's map → arm64 crash symbolication is silently broken.
Trigger (needs all three)
- Obfuscation on (
--obfuscate)
- Multi-ABI release (the default)
--split-debug-info resolves under build/
Why it matters
Silent, and fails late — only surfaces when symbolicating a real production arm64 crash. Bad look for a platform that sells crash handling.
Not affected
- Shipped engines / patches (orthogonal)
- Non-obfuscated releases
- Symbol dirs outside
build/
Fix (remove the footgun, don't just document it)
release already preserves each ABI's libapp.so across the inter-ABI clean — route the symbol map through that same preserve step. Or default --split-debug-info to a koolbase-managed dir outside build/ when the dev doesn't set one. Keep a guard that warns/relocates if it resolves under build/.
Do NOT
Rip out the inter-ABI flutter clean to "solve" this — it's likely load-bearing for clean per-ABI artifacts. Preserve-the-map is the safe fix; removing the clean is a separate investigation.
Priority
Low. Belongs in the release.go pass but must not expand chunk 1.
Stopgap today: put --split-debug-info outside build/ (the kb_symbols workaround already in use).
⚠️ Unverified: confirm release actually runs flutter clean between ABIs against the source before treating this as fact.
What
On a multi-ABI
koolbase releasewith--obfuscate --split-debug-info=<dir under build/>, theflutter cleanrun between ABIs deletesbuild/, taking the first ABI's symbol map with it. The release ships with only the last ABI's map → arm64 crash symbolication is silently broken.Trigger (needs all three)
--obfuscate)--split-debug-inforesolves underbuild/Why it matters
Silent, and fails late — only surfaces when symbolicating a real production arm64 crash. Bad look for a platform that sells crash handling.
Not affected
build/Fix (remove the footgun, don't just document it)
releasealready preserves each ABI'slibapp.soacross the inter-ABI clean — route the symbol map through that same preserve step. Or default--split-debug-infoto a koolbase-managed dir outsidebuild/when the dev doesn't set one. Keep a guard that warns/relocates if it resolves underbuild/.Do NOT
Rip out the inter-ABI
flutter cleanto "solve" this — it's likely load-bearing for clean per-ABI artifacts. Preserve-the-map is the safe fix; removing the clean is a separate investigation.Priority
Low. Belongs in the
release.gopass but must not expand chunk 1.Stopgap today: put
--split-debug-infooutsidebuild/(thekb_symbolsworkaround already in use).