android-file-transfer
Build times (auto-updated)
- x86_64: 3m29s (2026-09-27 18:21 UTC, MAKEFLAGS=-j6)
- aarch64: 4m9s (2026-09-28 18:28 UTC, remote, MAKEFLAGS=-j1)
New package, added 2026-09-19 under maintained/. Stable-release Qt GUI
build of https://github.com/whoozle/android-file-transfer-linux.
Why this package exists
Two related AUR packages already existed for the same upstream repo, but neither covers a stable-release Qt GUI build:
android-file-transfer-git– VCS package, Qt GUI, maintained by a different person (FabioLolix).provides=(android-file-transfer)andconflicts=(android-file-transfer ...).android-file-transfer-cli– stable release, CLI-only (explicitly disables the Qt UI/fuse/mtpz/taglib/python cmake options), currently orphaned on AUR (no maintainer). Per project policy, orphan adoption is a manual human step – not something to act on automatically, so left alone.
This package fills that gap: a stable-release (not -git) full build
with the Qt GUI, CLI, and FUSE mount helper.
AUR repo history note (important)
git submodule add ssh://aur@aur.archlinux.org/android-file-transfer.git
did not clone an empty repo – it pulled real history from an
unrelated, long-abandoned package by a different maintainer
(yaroslav, last at pkgver 2.4, ancient qt5-base/fuse (v2) deps).
That package no longer shows up in AUR’s database/search
(rpc/v5/info returns 0 results for the name) – deleted from the
listing at some point, but the git backend kept the repo/history. Our
new PKGBUILD/.SRCINFO were added as a fresh commit on top of that
existing history, not a history rewrite/force-push – this is the
normal way to revive a dead AUR package name.
Build (cmake options)
Upstream CMakeLists.txt options, all default ON except
BUILD_SHARED_LIB/USB_BACKEND_LIBUSB (default OFF):
BUILD_FUSE, BUILD_MTPZ, BUILD_PYTHON, BUILD_TAGLIB,
BUILD_QT_UI, BUILD_SHARED_LIB, USB_BACKEND_LIBUSB.
Chosen for this package:
BUILD_QT_UI/BUILD_FUSE/BUILD_MTPZ/BUILD_TAGLIB=ON– the whole point of this package vs.-cli.BUILD_PYTHON=OFF– upstream’s python bindings needpybind11; we don’t package that dependency, and leavingBUILD_PYTHON=ONwithout it just silently skips (soft warning) rather than failing, which would be non-deterministic across build chroots depending on whetherpybind11/dev headers happen to be present. Disabling it explicitly keeps the build deterministic.USB_BACKEND_LIBUSB=OFF– default kernel usbdevfs backend; upstream’s own comment warns the libusb backend is “known to be broken – large memory consumption, violating kernel memory limits and bugs.”BUILD_SHARED_LIB=OFF– matches upstream default, static lib only.
Generator/build: plain cmake -B build -S . + cmake --build build
(no ninja needed, makedepends=(cmake qt6-tools) only – qt6-tools
supplies Qt6’s linguist tools used for building translations).
Dependencies
depends=(qt6-base fuse3 taglib openssl hicolor-icon-theme readline
file android-udev). readline/file (for libmagic) were added
after the first test build – namcap flagged both as implicitly
linked-but-undeclared. android-udev is not a real AUR package name
– only android-udev-git exists and provides=(android-udev); this
matches android-file-transfer-cli’s own PKGBUILD, which depends on
the same virtual name for the udev rules needed to access MTP devices
as a non-root user. namcap flags it “may not be needed” since it
can’t detect a udev-rule dependency by linkage – expected false
positive, same as on -cli.
conflicts=(android-file-transfer-git android-file-transfer-cli) –
real file overlap (both ship aft-mtp-cli/binaries under the same
paths).
Re-checked 2026-09-24 (FEEDBACK.txt sweep): check_aur_feedback.sh
still flags this MISSING on every run – expected, per the “AUR repo
history note” above (never pushed under this name, nothing to find).
Build status
Test-built clean for x86_64 via repo_build_staged.sh
(REPO_BUILD_ONLY_ARCH=x86_64), pkgver 4.5-1, first try after adding
the two missing namcap-flagged deps. Not yet committed/pushed/published
– staged only, pending user review (per project policy, all git
commits/pushes are done by the user, not automated).
2026-09-27: superseded by official extra – migrated to adapted/
Official Arch’s own extra repo started shipping android-file-transfer
4.5-2 directly (x86_64 only) at some point after this package was
created – the user noticed and flagged it. The gap this package
originally filled (no stable-release Qt GUI build existed anywhere) no
longer exists for x86_64, but our own build still uniquely covers
aarch64 (official extra doesn’t publish that arch for this
package at all), so not fully redundant.
Per the user’s own call: this is now “just an arch adaptation” of an
otherwise-official package, not a real AUR submission (it was never
actually pushed to AUR anyway – the maintained/ submodule sat
staged-only this whole time, see the entry above) – moved to
adapted/android-file-transfer as a plain fork of official Arch’s own
current PKGBUILD (matches it exactly except arch=() gains aarch64).
pkgrel 1 -> 2.1 (matching upstream’s own 2, plus the local arch
addition). Built + published clean for x86_64; aarch64 pending –
eurobuild14 (and the whole ARM cluster) was down at the time.
The old maintained/android-file-transfer git submodule (fully
committed in the superproject, clean working tree, never actually
pushed to its AUR remote) still needs manual removal by the user –
not done here, since submodule deinit/removal is a git operation.
2026-09-28: aarch64 published, first attempt hit eurobuild14 swap-thrashing
First real aarch64 build attempt once the ARM cluster came back up. This
package’s qt6-base/qt6-tools deps are heavy enough that eurobuild14
started thrashing under the existing per-host MAKEFLAGS=-j1 cap alone
– ping kept succeeding but new ssh connections timed out mid-banner
while the build’s own already-established session stayed alive (see
memory/TOOLING_NOTES.md’s “Remote ARM build machines” entry for the
general symptom). User killed/power-cycled the board partway through
rather than wait it out.
After the reboot: mounted /data fresh, and per the user’s tip
swapon’d the board’s existing /data/swap (2G file, wasn’t active by
default) before retrying – also had to clear a stale
/data/INSTALL/.building.lock left behind by the killed attempt (board
being power-cycled meant repo_build.sh never got to release it
itself; confirmed no real build process was still running before
clearing it). With swap active, the retry built and published cleanly
in ~4 minutes, no thrashing. android-file-transfer-4.5-2.1-aarch64
live; the stale 4.5-1-aarch64 build the old x86_64-era pkgrel had
left behind was auto-archived by repo_publish.sh.