- Shell 100%
| docs | ||
| packages | ||
| .gitignore | ||
| backup.sh | ||
| clean-box.sh | ||
| config.sh | ||
| connect.sh | ||
| install.sh | ||
| list-packages.sh | ||
| provision.sh | ||
| README.md | ||
onn-fleet-provisioning
Scripts and docs for provisioning, backing up, and restoring app installs across a fleet of onn 4K Amlogic-based streaming boxes via ADB.
Repo structure
onn-fleet-provisioning/
├── config.sh # single source of truth for the target box's IP
├── connect.sh # connect to a box and verify it's ready
├── list-packages.sh # list/search installed packages on a box
├── backup.sh # pull installed APKs from a box into packages/
├── install.sh # install APKs from packages/ onto a new box
├── clean-box.sh # disable stock launcher, set Projectivity home, remove unwanted apps
├── provision.sh # one-shot: connect check + install + clean, for a fresh box
├── packages/ # per-app APK backups (gitignored, run backup.sh to populate)
│ └── _removed/ # stale package folders, moved here rather than deleted
├── docs/
│ └── backup-restore.md
├── .gitignore
└── README.md
Device IP is set in one place: edit DEVICE_IP in config.sh, and
every script picks it up automatically. To target a different box for a
single run without editing the file, pass an IP as an argument:
./connect.sh 192.168.1.250
./install.sh 192.168.1.250
./provision.sh 192.168.1.250
(backup.sh and clean-box.sh also accept an optional IP argument the
same way; list-packages.sh always uses config.sh.)
Prerequisites
- ADB installed on your Mac (
which adbto confirm) - Target onn box and your Mac on the same local network
- Developer Options + Network debugging enabled on the box
Quick start
Connecting to a new box for the first time:
- On the TV: Settings → System → About → click "Build" 7 times
- Settings → System → Developer Options → enable Network debugging
- Find the IP: Settings → Network & Internet → [connection]
./connect.sh <box-ip>and accept the popup on the TV with the remote
Backing up a box (edit DEVICE= in backup.sh first):
./backup.sh
Provisioning a brand new box from an existing backup:
./provision.sh <box-ip>
Runs install + clean-box in one pass. Use install.sh and clean-box.sh
separately if you want to run those steps independently or re-run just one.
Finding a package name you don't know:
./list-packages.sh magis
See docs/backup-restore.md for the full step-by-step walkthrough and
troubleshooting notes.
Currently tracked apps
SmartTube, Stremio, Nuvio, Jellyfin, FCast Receiver, LocalSend, MX Player,
Tubi, Windscribe, Button Mapper, Projectivity, RB (rblive), Shiru,
Magis/Xuper (com.android.mgstv).
Not yet in the backup list:
- VLC — official Play Store listing exists; install directly, or pull from a device that already has it (see docs).
- LeanKey — not on Play Store; sideload from its GitHub releases.
Known limitations
- App private data is not backed up. APKs only — logins, watch
progress, and app settings (including Button Mapper / LeanKey key
remaps) are not included.
adb backupdoesn't work for third-party apps on modern Android (12+). Current fallback: reconfigure manually per box, or check each app's own settings for an export feature. Rooting (Magisk) was considered for/data/data/access but is on hold given brick risk on these boxes — revisit only after testing on a single spare box. - Architecture-locked. All APKs assume ARM (Amlogic SoC). Don't restore this backup onto a box with a different CPU architecture.
Notes
"Xuper" and "Magis TV" are the same app — package com.android.mgstv.
License
Internal/personal use — no license specified.