Skip to the content.

07 · APK harvest & identification (140 apps, 2026-06-28)

How the app cohort was re-enumerated from the live device and pulled byte-for-byte as APKs — the foundation for the integration scan (08) and the live-config audit (09). This supersedes the static 114-app inventory: the device now carries 140 Appmiral/Appstrakt apps, and all of them were harvested with their full split-APK sets.

Evidence header & raw package list: logs/evidence_header_2026-06-28.txt (in the evidence snapshot) · data/installed_apps_2026-06-28.csv · data/apk_files_manifest_2026-06-28.csv. Harvester: ../../tools/apk-harvest/harvest-apks.ps1.

Cohort: 140 installed apps

Enumerated with adb shell pm list packages -3 and filtered to the Appmiral namespace (appmiral.*, be.appstrakt.*, pl.mysticfestival, com.triple.verstappen). Reconciled against the old 114-app inventory (00-app-inventory.md):

Status Count
Installed now 140
Still present (in the old 114 inventory) 114
New since the 114 inventory 26
Removed 0

The 26 newly-installed apps

appmiraldemo            bbcradio2              clamotterock
creamfieldsasia         curacaonorthseajazz    deopening
designerssaturday       fckngserious           fiftylabmusicfestival
folkemoedet             fvdedinthepark         honkbalweekhaarlem
hotelnachtamsterdam     ilosaarirockfestival   klimafolkemodet
mexicogp                musicweekpoland        rhythmnvines
rogersstadium           sailamsterdam          sparkarena
szeneopenair            tonderfestival         vitaeglobal
vlissingenmaritiem      cphoperafestival (com.appmiralm.*, typo'd demo)

(All com.appmiral.* unless noted.) The full machine-readable reconciliation, including which old apps are still installed, is in installed_apps_2026-06-28.csv.

Harvest: 375 split-APK files, ~7.08 GB

Modern Appmiral apps ship as split APKs (an App Bundle install): a base.apk plus split_config.* for the device’s ABI and screen density. For each package the harvester resolves every split with adb shell pm path <pkg> and pulls the exact installed bytes with adb pull — no root required for APKs, and the bytes are identical to what Google Play delivered.

Metric Value
Packages 140
APK files pulled 375 (base.apk + split_config.*)
Total size ~7.08 GB
Per-file integrity SHA-256 recorded at pull time

The harvester is parameterized (-Serial, -OutDir, -ManifestCsv, -Force), idempotent/resumable (a per-package marker skips already-pulled apps), and writes a row per file to apk_files_manifest_2026-06-28.csv:

package, versionName, versionCode, file, size_bytes, sha256, on_device_path, captured_ts

The on_device_path (e.g. /data/app/~~…/com.appmiral.ttfestival-…/base.apk) records exactly where on the device each byte came from. The APK bytes live in the private repo (apks_2026-06-28_154246/<pkg>/); the public apk-manifest.sha256 is byte-for-byte identical to the private folder’s SHA256SUMS.txt, so the public record attests precisely which APKs were captured.

Identification

Each app was identified from its manifest (via androguard) — see integration_matrix_2026-06-28.identify.csv:

package, label, versionName, versionCode, minSdk, targetSdk, abis,
loc_fine, loc_coarse, loc_background

Demo/typo’d packages (com.appmiral.appmiraldemo, com.appmiralm.cphoperafestival) are kept in the cohort and flagged as such — they are part of what is actually installed.

Reproduce

# pulls every split of every Appmiral app + writes the manifest CSV
pwsh tools/apk-harvest/harvest-apks.ps1 `
  -OutDir <private>/apks_2026-06-28_154246 `
  -ManifestCsv docs/appmiral-comparison/data/apk_files_manifest_2026-06-28.csv

Prerequisites, pinned tool versions, expected output and checksum verification: 10-apk-harvest-reproduction.md.