Skip to content

Validate that a VM patch applies to an obfuscated release (base ↔ patch obfuscation parity) #2

Description

@kennedyowusu

Summary

koolbase release forwards --obfuscate to the per-ABI builds, so an obfuscated base binary can be produced. What hasn't been validated is whether a VM patch applies on-device to an obfuscated base — and what obfuscation settings a patch must be built with to match that base.

This is orthogonal to #1 (which covers --split-debug-info symbol maps being lost to the inter-ABI flutter clean, a crash-symbolication bug). This issue is about code push applying to obfuscated binaries, not about symbol maps.

Background

  • --obfuscate reaches the inner per-ABI builds as passthrough, so each ABI's AOT snapshot is compiled obfuscated.
  • Obfuscation renames symbols and alters the compiled snapshot. A VM patch is a diff against that snapshot, so the patch's view of the base must match the obfuscated base exactly.

Open questions

  1. Does a patch built against an obfuscated base apply cleanly on-device?
  2. Must the patch be built with the same obfuscation settings as the base (expected: yes)? What happens if they differ — clean failure, or silent misapply?
  3. Is obfuscation deterministic enough across builds that a separately-built patch resolves the same symbols as the shipped base, or does the patch workflow need the base build's artifacts/seed to stay in sync?

Acceptance criteria

  • Build an obfuscated release:
    koolbase release android --flavor <flavor> -- --obfuscate --split-debug-info=<dir outside build/>
  • Build a patch against that base with matching obfuscation settings, push it, and confirm it applies on a physical device.
  • Document the base↔patch obfuscation-parity requirement in the patch docs.
  • If parity can't be guaranteed across independent builds, document the required workflow (e.g. retaining base artifacts) or gate/​warn in the CLI.

Notes

Related: #1

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions