compareZipEntries function

ZipEntryDiff compareZipEntries(
  1. String pathA,
  2. String pathB
)

Compare the zip entry lists of two APK/AAB files.

Entry names only (directories included as-is); common entries are compared by crc32 to catch silent content swaps. Timestamps and compression metadata are ignored — the gate targets content equivalence.

Implementation

ZipEntryDiff compareZipEntries(String pathA, String pathB) {
  final entriesA = _entryCrcs(pathA);
  final entriesB = _entryCrcs(pathB);
  final onlyA = entriesA.keys.where((n) => !entriesB.containsKey(n)).toList()
    ..sort();
  final onlyB = entriesB.keys.where((n) => !entriesA.containsKey(n)).toList()
    ..sort();
  final changed = entriesA.keys
      .where(
        (n) =>
            entriesB.containsKey(n) &&
            entriesB[n] != entriesA[n] &&
            entriesA[n] != null,
      )
      .toList()
    ..sort();
  return ZipEntryDiff(
    onlyInA: onlyA,
    onlyInB: onlyB,
    changedContent: changed,
  );
}