{"id":13419820,"url":"https://github.com/whoozle/android-file-transfer-linux","last_synced_at":"2025-05-14T09:07:10.168Z","repository":{"id":29414908,"uuid":"32950454","full_name":"whoozle/android-file-transfer-linux","owner":"whoozle","description":"Android File Transfer for Linux (and macOS!)","archived":false,"fork":false,"pushed_at":"2025-05-10T19:30:15.000Z","size":3833,"stargazers_count":1528,"open_issues_count":66,"forks_count":119,"subscribers_count":33,"default_branch":"master","last_synced_at":"2025-05-12T04:53:14.312Z","etag":null,"topics":["album-cover","android","cli","file-transfer","file-transfer-android","file-transmission","fuse","fuse-interface","linux","lumia","macosx","mtp","osx","ptp","smartphone","smartphone-interaction","transfer","ui","zune"],"latest_commit_sha":null,"homepage":"http://whoozle.github.io/android-file-transfer-linux/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/whoozle.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2015-03-26T20:34:02.000Z","updated_at":"2025-05-10T22:08:26.000Z","dependencies_parsed_at":"2023-12-12T21:28:57.681Z","dependency_job_id":"8b084631-272d-4ef9-98a8-5629cfd8fba2","html_url":"https://github.com/whoozle/android-file-transfer-linux","commit_stats":{"total_commits":1603,"total_committers":40,"mean_commits":40.075,"dds":0.0399251403618216,"last_synced_commit":"cf7036c7f7dff99be19c2c15e6051c4704287574"},"previous_names":[],"tags_count":22,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/whoozle%2Fandroid-file-transfer-linux","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/whoozle%2Fandroid-file-transfer-linux/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/whoozle%2Fandroid-file-transfer-linux/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/whoozle%2Fandroid-file-transfer-linux/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/whoozle","download_url":"https://codeload.github.com/whoozle/android-file-transfer-linux/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254110374,"owners_count":22016391,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["album-cover","android","cli","file-transfer","file-transfer-android","file-transmission","fuse","fuse-interface","linux","lumia","macosx","mtp","osx","ptp","smartphone","smartphone-interaction","transfer","ui","zune"],"created_at":"2024-07-30T22:01:21.365Z","updated_at":"2025-05-14T09:07:10.158Z","avatar_url":"https://github.com/whoozle.png","language":"C++","readme":"# Android File Transfer For Linux (FreeBSD and macOS, too!)\n\n[![License](https://img.shields.io/:license-LGPLv2.1-blue.svg)](https://github.com/whoozle/android-file-transfer-linux/blob/master/LICENSE)\n[![Version](https://img.shields.io/:version-4.5-green.svg)](https://github.com/whoozle/android-file-transfer-linux)\n[![Android File Transfer for Linux (and macOS!)](https://github.com/whoozle/android-file-transfer-linux/actions/workflows/actions.yml/badge.svg)](https://github.com/whoozle/android-file-transfer-linux/actions/workflows/actions.yml)\n\nAndroid File Transfer for Linux — a reliable [MTP](https://en.wikipedia.org/wiki/Media_Transfer_Protocol) client with minimalistic UI similar to [Android File Transfer](https://www.android.com/intl/en_us/filetransfer/).\n\n![AFTL Screenshot](screenshot.png \"Nintendo Switch MTP connection and device-generated thumbnails.\")\n\nIt just works™.\n\n## Do I need it?\n\nIf you're happy with `gmtp`/`gvfs`/`mtpfs` or any other MTP software, you might not need this software (but give it a try!).\n\nIf you're suffering from crashes, missing tags, album covers, USB freezes, and corrupted files however, this software is right for you.\n\n## Pre-built Packages\n\nIf your distribution does not provide an `android-file-transfer-linux` package, you can still install it on your system.\n\nThere's quite a few packages available:\n- AppImage: https://github.com/whoozle/android-file-transfer-linux/releases\n- macOS DMG image: https://github.com/whoozle/android-file-transfer-linux/releases\n- macOS Homebrew: `brew install --cask whoozle-android-file-transfer` or `brew install --cask whoozle-android-file-transfer-nightly`\n\n## Support me\nIf you want to help me with development, click on the link below and follow the instructions. I'm working on this project in my spare time and I try to fix everything as fast as possible, sometimes adding features in realtime (more than 100 tickets closed by now).\nAny amount would help relieving the pain of using MTP. :D\n\nhttps://www.paypal.me/whoozle\n\n## Features\n\n* Simple Qt UI with progress dialogs.\n* FUSE wrapper (if you prefer mounting your device), supporting partial read/writes, allowing instant access to your files.\n* No file size limits.\n* Automatically renames album cover to make it visible from media player.\n* Supports Zune and Zune HD.\n* USB [zerocopy](https://docs.kernel.org/networking/msg_zerocopy.html) support found in recent Linux kernels (no user/kernel data copying).\n* No extra dependencies (e.g. `libptp` or `libmtp`).\n* Available as a static/shared library.\n* Command line tool [`aft-mtp-cli`](https://manpages.debian.org/testing/android-file-transfer/aft-mtp-cli.1.en.html).\n* Python bindings.\n\n## FAQ\n[Please take a look at the FAQ if you have issues with your operating system](FAQ.md). It's not that big, but those are the questions asked very often.\n\n## Installation\n\n### Debian/Ubuntu\n\n```\nsudo apt-get install android-file-transfer\n```\n\n### Gentoo\n\nAndroid File Transfer for Linux is now included in Gentoo. You don't have to build anything, just run\n\n```\nsudo emerge -av sys-fs/android-file-transfer-linux\n```\n\nIf you need a FUSE mount helper to mount MTP filesystems, you have to enable the FUSE use flag, e.g. adding the following in `/etc/portage/package.use` (which can either be a directory or a file):\n```\nsys-fs/android-file-transfer-linux fuse\n```\n\nYou can use the `sys-fs/android-file-transfer-linux-9999` ebuild if you want the latest Git version by adding the following entry to `/etc/portage/package.accept_keywords (which can either be a directory or a file):\n```\n=sys-fs/android-file-transfer-linux-9999 **\n```\n\n### Arch\n\n  ```\n  sudo pacman -S android-file-transfer\n  ```\n\n## Building from source\n\n### Prerequisites\n\n* You will need the Qt libraries for building the UI program. If you're planning to use only the library (*Qt is not needed*), you could turn the option ```BUILD_QT_UI``` off.\n* For Ubuntu and other Debian-based distros, use the following command:\n\n  ```shell\n  sudo apt-get install build-essential cmake qt5-default ninja-build libfuse-dev libreadline-dev qttools5-dev\n  ```\n\n  For Fedora:\n  ```\n  dnf install make automake gcc gcc-c++ kernel-devel cmake fuse fuse-devel qt-devel readline-devel libqt5-linguist-devel\n  ```\n\n* Basically\n  * you need `libqtX-dev` or `libqt5-dev` for the UI,\n  * `libfuse-dev` for the FUSE interface,\n  * and `cmake`, `ninja`, or `make` for building the project.\n\n### Building with Ninja\n\n```shell\nmkdir build\ncd build\ncmake -G Ninja ..\nninja\n\n./qt/android-file-transfer\n```\n\n### Building with make\n\n```shell\nmkdir build\ncd build\ncmake ..\nmake\n\n./qt/android-file-transfer\n```\n\n### Installing binary package on macOS\nThere is a binary package that can be installed via Homebrew:\n * First, install [`brew`](https://brew.sh) if you don't have it already installed.\n * Then, the stable package may be installed via:\n\n ```shell\nbrew install homebrew/cask/whoozle-android-file-transfer\n ```\n * The nightly build may be installed via:\n\n ```shell\nbrew install homebrew/cask-versions/whoozle-android-file-transfer-nightly\n ```\n\n * Please note: Stable and nightly are in conflict, so please make sure to uninstall one of them when you want to switch between stable and nightly.\n\n### Building app package on macOS\n\nYou'll need Qt installed to build the GUI app. Here are the build instructions with Qt5 from Homebrew (`brew install qt5`):\n\n```shell\nmkdir build\ncd build\ncmake .. -DCMAKE_INSTALL_PREFIX=~/Applications -DCMAKE_PREFIX_PATH=/usr/local/opt/qt5\nmake\nmake install\n\nopen ~/Applications/android-file-transfer.app\n```\n\n### Installation\n\n`sudo ninja install` or `sudo make install` will install the program into the cmake prefix/bin directory (usually `/usr/local/bin`).\n\n\n## How to use\n\n### FUSE interface\n\n```shell\nmkdir ~/my-device\n./aft-mtp-mount ~/my-device\n```\nRemember, if you want album art to be displayed, it must be named 'albumart.xxx' and placed *first* in the destination folder. Then copy other files.\nAlso, note that FUSE could be 7-8 times slower than UI/CLI file transfer.\n\n### ZUNE firmware flashing/recovery\n\n1. Find Zune-Firmware-x86.msi on the internet\n2. Unpack it `7z x Zune-Firmware-x86.msi` in some directory, you should get the following files there:\n\n```\nDracoBaselineCab  FirmwareUpdateXml  KeelBaselineCab  PavoBaselineCab  ScorpiusBaselineCab\n```\n3. Find the name of your update in FirmwareUpdateXml. If you're not sure, open [Zune Specifications](https://en.wikipedia.org/wiki/Zune#Specifications) wikipedia page, find your model in \"Official Model Numbers\" row, and match with \"Codename\".\nFor instance Zune 4 model 1124 has codename \"Scorpius\".\n4. Unpack update for your device into some folder using cabextract: `cabextract XXXXBaselineCab`.\n\nHere's content of all cabs:\n```\n├── Draco\n│   ├── EBoot.bin\n│   ├── Games.cab\n│   ├── nk.bin\n│   └── recovery.bin\n├── Keel\n│   ├── EBoot.bin\n│   ├── Games.cab\n│   ├── nk.bin\n│   └── recovery.bin\n├── Pavo\n│   ├── EXT.bin\n│   ├── NK.bin\n│   ├── Recovery.bin\n│   └── ZBoot.bin\n└── Scorpius\n    ├── EBoot.bin\n    ├── Games.cab\n    ├── nk.bin\n    ├── recovery.bin\n    └── xldr.bin\n```\n\n5. Flash firmware files using cli tool. Generally you don't need to flash anything called `*boot*` or `*recovery*`.\nOriginal software starts with nk.bin, then EXT or Games.\nHere's an example of how I flash model 1395:\n```\naft-mtp-cli -v -d 045e:063e # finds Zune HD 16Gb (model 1395)\n\nflash zune/Pavo/NK.bin\nflash zune/Pavo/EXT.bin\ndevice-reboot\n```\n6. Wait until your Zune restarts, it can take a minute or two.\n7. Voila, you don't need to fiddle with Zune software on windows anymore.\n\n### Qt user interface\n\n1. Start application, choose destination folder and click any button on toolbar.\n2. The options available are: `Upload Album`, `Upload Directory`, and `Upload Files`.\n   The latter two are self-explanatory. `Upload Album` tries searching the source directory for album covers and sets the best available cover.\n3. You could drop any files or folders right into the application window: the transfer will start automatically.\n\n### Known problems\n* Samsung removed Android extensions from MTP, so FUSE will be available read-only, sorry. Feel free to post your complaints to https://forum.developer.samsung.com/\n* Sometimes downloading fails with a USB timeout, after which the phone becomes unresponsive: [Android bug #75259](https://code.google.com/p/android/issues/detail?id=75259)\n* Objects created in the UI will not show up in the FUSE filesystem: [Android bug #169547](https://code.google.com/p/android/issues/detail?id=169547)\n\nUp-to-date list of all known problems and bugs are available [here](https://github.com/whoozle/android-file-transfer-linux/issues).\n\n## Contacts\nPlease do not hesitate to contact me if you have any further questions. My email address is \u003cvladimir.menshakov@gmail.com\u003e.\n\n## Special thanks\n* All who filed bugs on GitHub and wrote emails. Many features came to be only because of your feedback. Thanks!\n* Alexey [gazay](https://github.com/gazay) Gaziev for useful suggestions, support, and invaluable help with the MacBook and macOS port.\n* @ssnjrthegr8 for the new logo!\n\n## License\n\nAndroid File Transfer for Linux is released under the [GNU LGPLv2.1 License](https://github.com/whoozle/android-file-transfer-linux/blob/master/LICENSE).\n\nCopyright © 2015-2022 Vladimir Menshakov\n","funding_links":["https://www.paypal.me/whoozle"],"categories":["TODO scan for Android support in followings","C++"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwhoozle%2Fandroid-file-transfer-linux","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwhoozle%2Fandroid-file-transfer-linux","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwhoozle%2Fandroid-file-transfer-linux/lists"}