Android original-quality auto backup
Android original-quality auto backup, in Azalea, means MediaStore rows copied as the files they already are. The app does not recompress to a Google Photos “storage saver” tier. Application id net.duguying.photos, same protocol as iOS, so the same bucket or USB library can be claimed on the other phone. Originals go to your COS, OSS, S3, USB tree, or Samba share. They do not pass through an Azalea server.
minSdk is 26. On API 26–32 the permission is READ_EXTERNAL_STORAGE. On 33+ it splits into images and video. API 34 selected-photos access is real and will silently omit the rest of the roll. If the banner reads You can currently access only the photos you selected, you do not have a library backup. Tap Allow access to all or open Settings and grant Photos and videos for Azalea Photos.
USB is a persisted document tree, not a POSIX path. Object storage is a profile with bucket, region, and keys. The notification Azalea backup is the Android equivalent of the iOS Live Activity. It can stay on screen after the OEM has already killed the worker. Reopening continues from backup-index.sqlite. That is the product, not a hidden setting.
Steps
- Install Azalea Photos. Pass the permission gate. If you see Photo access is off. Open Settings and allow Photos and videos., tap Open Settings and grant access. Do not leave the picker on a handful of albums if you mean the whole camera roll.
- Open Cloud Album → Backup storage. Empty copy: No backup storage yet / Add Tencent COS, Alibaba OSS, S3, or a USB device. You can add multiple COS / OSS / S3 profiles. Only one USB profile is allowed. Only one profile is active at a time.
- For S3, fill Bucket, Region, AccessKey, SecretKey. English lab runs used S3 Standard us-west-2. Chinese write-ups of the same method may mention COS Guangzhou. Tap Test connection. Expect Connected (can list objects) or Read/write probe succeeded. A sub-user with GET but no PUT dies on the first photo.
- For USB, tap Choose backup folder on USB. That is
OpenDocumentTree. Grant the tree and let the app persist the URI. Skipping persist looks fine until the next reboot: the profile remains, the listing is empty. Engine extramode=bridgeis required because OTG only hands you acontent://URI; POSIXopen()does not work on that tree. - Enable Automatic backup. On HyperOS and ColorOS, take the app off battery optimization or the notification stays while the worker is already dead. Optional: Allow cellular, Background backup only while charging, Show backup progress notification.
- Watch Pending, Uploading, and Failed on the status screen. When pending is zero, claim from a second device or plug the disk into a computer and watch
.album/manifest.jsonlgrow. Do not rename files on the backup disk in a stock file manager if you still expect a later claim to find them.
Xiaomi 14 HyperOS 2.0.5 killed the NAS job repeatedly in the family Synology run (January–March 2026, DS220+ DSM 7.2.2, share photos). Resume was always “open the app,” not “wait harder.” Huawei Mate 60 HarmonyOS 4.2.0, 22 Feb 2026: the first OTG plug registered as charging only. After switching USB mode to file transfer, the volume appeared in the document tree. Unplugging at about 61 percent (5,100 / 8,359) produced DeviceDetached. Twelve .<name>.<n>.tmp files were dropped and rewritten. Nothing under the real names was half-written.
Each MediaStore row is one resource. Motion photos and screenshots land in smart albums (Videos, Screenshots, Animated); empty smart albums hide. Favorites on Android will not map to iOS local_identifier after a claim the other way. Google Photos can stay installed. Turn its backup off if you do not want two systems deleting locals.
Original quality, and what that is not
“Original quality” is the file MediaStore pointed at. Pixel JPEG in the April 2026 Pixel 8 → iPhone 16 run averaged 4.08 MB; iPhone HEIC in the March USB run averaged about 3.12 MB. Azalea did not transcode either set. If a clip is already a 2 MB black MP4 on the phone, the bucket will hold a 2 MB black MP4. That file, VID_20231102_221418.mp4, failed the hash check on 2 Apr 2026 and stayed unrecoverable. Honest transfer of junk is still junk.
Google’s saver tier often re-encodes. iCloud Optimize replaces locals with placeholders. Azalea’s auto backup does neither. If you later claim the bucket on an iPhone, the backed-up library lists those keys; the system camera roll stays empty until you download. That is expected.
WorkManager plus a foreground service is still a guest of the OEM. Doze, Adaptive Battery, and “restrict background activity” will stop the worker. The Azalea backup notification is not proof of progress. Open Status, read Pending, and if needed tap Resume backup. Retry all failed is for rows that actually landed in Failed, not for a process the OS already killed.
One failure that looks like success
The control run that skipped takePersistableUriPermission kept the USB profile after a process kill and listed nothing after reboot. The screen still said a USB device was configured. Waiting for USB device never cleared until we granted the tree again. Persist the URI. If you see A USB profile already exists. Only one is supported., you already have the slot; edit that profile rather than adding a second.
exFAT names with : * ? are escaped. The logical key in the app does not change. Trailing spaces are eaten on exFAT; a still named 新建 文本文档.JPG (copied from Windows onto the Mate 60 stick) kept a stable key only because the escaped physical name held it. Do not tidy those paths in Files.
FAQ
Does Android photo auto backup original quality still run with the screen off?
Sometimes. WorkManager and the foreground notification are the intended path. HyperOS, ColorOS, and similar skins kill the job anyway. If Pending has not moved when you come back, open Azalea. Resume from the index. USB backup additionally wants the app in the foreground and the volume attached.
Can I keep Google Photos installed?
Yes. Turn Google Photos backup off if you do not want two janitors. Azalea will not delete device copies because a Google switch told it to. The second copy has to be on your disk or bucket first.
Will the same S3 bucket work on iPhone?
Yes, if bucket, region, and keys match. Display names can differ. Provider is read-only after you pick it. Claim on the iPhone when Android Pending is 0. Android cannot reuse iOS local_identifier; the reverse claim still matches by content. See move photos from Android to iPhone and the migration feature page.
What does extra.mode=bridge mean for me?
You do not type it. Android USB uses SAF because the OS will not give the app a raw mount path. The engine talks to the document tree through a bridge. If you format the stick APFS, Android will not write it. Stay on exFAT for a disk that both phones will use.
Where do I get the app?
/en/download. Backup storage details for buckets are on the object-storage page. USB picker behaviour is on the USB page.