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.3.tar.gz (50.4 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.3-py3-none-any.whl (45.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: androidmigrate-0.1.3.tar.gz
  • Upload date:
  • Size: 50.4 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.3.tar.gz
Algorithm Hash digest
SHA256 331edd3ef06fb4ebd15e9878889ba3544872ab4310450dd26d116e25e0d2ca90
MD5 b7827a89fec33154be29023f9ea6d43e
BLAKE2b-256 0263ad51e46437da45fb1d848e8d9d1cc916674cbbebe1cbe0601fbe9f07c7e6

See more details on using hashes here.

Provenance

The following attestation bundles were made for androidmigrate-0.1.3.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.3-py3-none-any.whl.

File metadata

  • Download URL: androidmigrate-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 45.6 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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 24f049d70f6133e065d0712a4a96c5b6662acbdebc52dcce4f2bebe422097bdf
MD5 0447963caed07499c441e59d9154e709
BLAKE2b-256 5e120935267a5be01c103a3a0e54ecaff669fc53b26e2c9bb8a10f7787948875

See more details on using hashes here.

Provenance

The following attestation bundles were made for androidmigrate-0.1.3-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