Skip to main content

Checkpointed Android folder backup and sync over adb.

Project description

AndroidMigrate

Checkpointed Android folder backup and sync over ADB.

AndroidMigrate keeps a local mirror of folders on your Android device, tracks changes with content-addressed blob storage, and creates checkpoints so you can restore any previous state back to the phone.

Features

  • Incremental sync -- pulls only changed files from device using SHA-256 content hashing
  • Checkpoints -- automatic snapshots after every sync, with configurable retention
  • Restore -- push any checkpoint back to the device, or restore individual files
  • Clone restore -- migrate a checkpoint to a different device under a new profile
  • Conflict detection -- detects phone vs local edits and archives local copies for manual resolution
  • Local mirror recovery -- rebuild a corrupted or lost mirror from checkpoint blobs
  • Backup folder change -- relocate the mirror directory with automatic rebuild from phone or checkpoint fallback
  • Root management -- add, disable, or remove sync roots (e.g. DCIM, Documents) per profile
  • Terminal UI -- curses-based dashboard for managing profiles, running syncs, browsing checkpoints, and resolving conflicts

Requirements

  • Python 3.12+
  • ADB (adb) installed and on PATH
  • Android device with USB debugging enabled

Installation

PyPI (all platforms)

pip install androidmigrate

AUR (Arch Linux)

yay -S androidmigrate

Homebrew (macOS)

brew tap MachineLearning-Nerd/tap
brew install androidmigrate

From source

git clone https://github.com/MachineLearning-Nerd/AndroidMigrate.git
cd AndroidMigrate
pip install -e .

Quick Start

# List connected devices
androidmigrate devices

# Create a profile
androidmigrate profile create myphone \
  --device SERIAL \
  --mirror ~/android-backup

# Add folders to sync
androidmigrate profile add-root myphone /sdcard/DCIM
androidmigrate profile add-root myphone /sdcard/Documents

# Run a sync
androidmigrate sync myphone

# Launch the TUI dashboard
androidmigrate tui

CLI Commands

Command Description
devices List connected Android devices
profile create Create a new backup profile
profile add-root Add a device folder to sync
profile list List profiles and their roots
sync <profile> Sync files from device to local mirror
checkpoints <profile> List available checkpoints
restore <profile> <id> Restore a checkpoint to the device
repair-local <profile> Rebuild local mirror from checkpoint data
clone-restore <profile> <id> Clone a checkpoint to a different device
conflicts <profile> List unresolved file conflicts
resolve <profile> <id> Resolve a conflict (keep phone/local/both)
tui Launch the terminal UI

TUI Keybindings

Key Action
j/k or arrows Navigate profiles
e Edit sync roots
m Change backup folder
y Run sync
c View checkpoints
i View issues
l View run history
r Refresh
? Help
q Quit

Configuration

State is stored in .androidmigrate/ in the current directory by default. Override with:

export ANDROIDMIGRATE_HOME=~/path/to/state

Architecture

src/androidmigrate/
  cli.py          -- CLI entry point and argument parsing
  tui.py          -- Curses-based terminal UI
  tui_render.py   -- TUI rendering primitives (panels, badges, themes)
  sync_engine.py  -- Core sync, restore, and checkpoint logic
  storage.py      -- SQLite repository and content-addressed blob store
  transport.py    -- ADB transport layer (device communication)
  models.py       -- Domain data classes
  config.py       -- Path helpers and state directory layout
  mirror_path.py  -- Backup folder validation and autocomplete
  root_manager.py -- Interactive root browser and management

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

androidmigrate-0.1.2.tar.gz (44.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

androidmigrate-0.1.2-py3-none-any.whl (41.7 kB view details)

Uploaded Python 3

File details

Details for the file androidmigrate-0.1.2.tar.gz.

File metadata

  • Download URL: androidmigrate-0.1.2.tar.gz
  • Upload date:
  • Size: 44.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for androidmigrate-0.1.2.tar.gz
Algorithm Hash digest
SHA256 edf158a70be7fc7caa25603ce26c2b8a0b53bfcae862ad1c34e7218eea60ecbc
MD5 6daf0bc939a0916d464b5c33a9dccfd1
BLAKE2b-256 5f47a07f6cb3f2f991472e87c6b8302457b1a7fb3d8962f69710a16e03cc6e2c

See more details on using hashes here.

Provenance

The following attestation bundles were made for androidmigrate-0.1.2.tar.gz:

Publisher: release.yml on MachineLearning-Nerd/AndroidMigrate

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file androidmigrate-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: androidmigrate-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 41.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for androidmigrate-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 994ef5fa4c765300ff945dc1215651129314e4a782fe04b2b8c7ce29ebe8ac18
MD5 8bc6555acfe388e0ea27cdc4b04f9ce3
BLAKE2b-256 d9453631e7acfa7fad914fd2a4a4cf9291a4124d65dff739d00dcbfe32b1ee9a

See more details on using hashes here.

Provenance

The following attestation bundles were made for androidmigrate-0.1.2-py3-none-any.whl:

Publisher: release.yml on MachineLearning-Nerd/AndroidMigrate

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page