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.1.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.1-py3-none-any.whl (41.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: androidmigrate-0.1.1.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.1.tar.gz
Algorithm Hash digest
SHA256 b06c3ec1f845f1fdcab82e4d0f3f6821d9260f2a4ae2ed68d4ae963846ac53ab
MD5 0308c96616549a63f54452c0d3cef001
BLAKE2b-256 e0b62f8a94c2ceb171ca23bad8686770add4808ea07ca925c95fb9668297d798

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: androidmigrate-0.1.1-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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 29d3b875d9df5ca84102e1ece5ce1c903fb95814fb7b31a605ffb38628786655
MD5 3a2c1b7ec9bd27b5fb2f56f6a4ed61f1
BLAKE2b-256 b0c6ad38bb5a132fcaf02e012fd3027d8c748a9529f3c6f807288b459378ba38

See more details on using hashes here.

Provenance

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