compareZipEntries function
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,
);
}