Перейти к содержанию

Android-приложение: доступ к файлам и автобэкап через dixsu-туннель

CIFS Documents Provider (dix.su) — форк wa2c/cifs-documents-provider (MIT) с нативной поддержкой dixsu-туннеля. Позволяет открывать файлы устройства прямо в системном файловом пикере Android (как Google Диск/Яндекс Диск) и настраивать автоматический бэкап (фото и т.д.) — встроенными средствами приложения или через сторонние приложения синхронизации — без Termux, без root, без ручной настройки ProxyCommand.

RuStore / F-Droid

Публикация в RuStore и F-Droid в процессе. Пока единственный канал — GitHub Releases выше.

Установка

  1. Скачай APK: v2.4.0-dixsu.12 → файл CIFSDocumentsProvider-*-release.apk в Assets.
  2. Открой скачанный файл — Android попросит разрешить установку из этого источника (стандартный запрос при первой установке).
  3. Если раньше стояла старая тестовая сборка под другим applicationId — удали её вручную, автообновление между разными applicationId невозможно.

Настройка SFTP-соединения через dixsu-туннель

  1. Добавь новое соединение → Storage: SSH FTP (Apache Commons).
  2. Включи тумблер «dixsu tunnel».
  3. В поле Slug укажи имя устройства на dix.su (то, что до .dix.su в его адресе) — Host/Port подставятся и заблокируются автоматически (<slug>.dix.su:2222).
  4. «Do not check SSH trusted hosts» включится автоматически — так и должно быть: проверка ключа хоста иначе шла бы против локального конца туннеля, а не против реального устройства.
  5. Укажи обычные User/Password (или SSH-ключ) устройства — это учётные данные самого устройства, к dix.su как сервису отношения не имеют.
  6. Check connection (иконка папки со стрелкой вверху экрана) → Save.

Дальше файлы устройства доступны через системный пикер Android в любом SAF-совместимом файловом менеджере: Total Commander (плагин content/SAF в списке File system plugins → системный пикер → выбрать соединение → постоянный доступ к папке), X-plore, Material Files, стандартное приложение «Файлы».

Локальный SFTP-прокси — автобэкап фото и другие приложения

Системный пикер (SAF) — это просто способ, которым другие приложения видят хранилище, а не протокол передачи данных и не механизм фонового пуш-синка. Чтобы получить автобэкап вроде Google Photos, приложению нужен обычный прямой SFTP-доступ, в обход SAF.

В форме SFTP-соединения с включённым dixsu tunnel есть секция «Local SFTP proxy»:

  • Чекбокс «Keep proxy running (auto-restart if stopped)» поднимает локальный TCP-порт 127.0.0.1:<port> на телефоне. Любое приложение, умеющее подключаться по обычному SFTP (например, FolderSync, Autosync), может подключиться к этому адресу с теми же логином/паролем, что в самом соединении.
  • Порт детерминированный (вычисляется из ID соединения) — не меняется между запусками прокси, один раз настроенный адрес в стороннем приложении не «протухает».
  • Copy address — копирует 127.0.0.1:<port> в буфер обмена.
  • Пока чекбокс включён, прокси держится в фоне (постоянное уведомление), переживает сворачивание приложения и сам переподнимается при каждом запуске процесса приложения, если упал — ничего вручную делать не нужно. Снятие галочки останавливает прокси.

Обязательный шаг — отключить оптимизацию батареи

Если приложение не исключено из оптимизации батареи, Android (особенно не-stock прошивки вроде MIUI) рано или поздно заморозит фоновый процесс — прокси перестанет отвечать, хотя само приложение не крашится. В той же секции есть кнопка «Disable battery optimization» — тап открывает системный диалог «Let app always run in background?»; после Allow предупреждение пропадает автоматически.

Автопереподнятие не переживает полную перезагрузку телефона без единого открытия приложения

Переподнятие срабатывает при каждом запуске процесса приложения — как ручном открытии, так и когда систему поднимает обращение стороннего приложения к DocumentsProvider. Но если сразу после полной перезагрузки телефона ни разу не открыть приложение и ни одно другое приложение к нему не обратится — процесс не запустится, и прокси не поднимется, пока приложение не будет открыто хотя бы раз. Полноценный автозапуск с самой загрузки системы потребовал бы отдельного BOOT_COMPLETED-разрешения, которого сейчас в приложении нет.

Встроенный бэкап (без стороннего приложения)

Помимо прокси, в самом приложении есть два режима бэкапа — секция «Backup» в форме соединения (работает для любого типа хранилища, не только dixsu tunnel). Не нужен ни прокси, ни FolderSync — только это приложение.

Select folder to back up — обычный системный SAF-пикер, выбираешь локальную папку один раз.

  • «Sync now» — рекурсивно обходит папку и подпапки по кнопке, грузит новые (по имени) файлы, пропуская уже существующие. Надёжно, но работает только пока экран соединения открыт.
  • «Auto backup» — чекбокс рядом; раз в ~15 минут (минимальный интервал, который Android вообще разрешает для фоновых периодических задач) делает то же самое в фоне, без необходимости держать приложение открытым. Включается/выключается по нажатию Save. Как и для прокси, для надёжного расписания нужно исключить приложение из оптимизации батареи (кнопка в той же форме) — и точно так же не переживает полную перезагрузку телефона без единого запуска приложения после неё.

По умолчанию файлы грузятся в корень соединения; конкретную целевую подпапку можно выбрать (или создать новую кнопкой «+») в поле «Folder» формы соединения.

Что выбрать — встроенный бэкап или прокси + FolderSync

Нужен только бэкап на dixsu-устройство без лишних приложений — используй встроенный. Нужна более тонкая настройка (двусторонняя синхронизация, фильтры, мгновенный старт по появлению файла) — используй прокси + FolderSync/Autosync ниже, они умеют больше.

Настройка автобэкапа фото через FolderSync

Шаг 0. В приложении: открой соединение → включи «Keep proxy running»Copy address (например, 127.0.0.1:42495 — у каждого соединения свой порт).

Шаг 1 — Account в FolderSync:

  1. Accounts+ → тип SFTP.
  2. Server: 127.0.0.1, Port: скопированное число (не 22/2222 — именно порт прокси).
  3. Username / Password: те же, что в самом SFTP-соединении в приложении.
  4. Test connection (в этот момент в приложении должно быть видно «Proxy running»).
  5. Сохранить.

Шаг 2 — Folderpair:

  1. Folderpairs+ → выбрать созданный Account.
  2. Local folder: например DCIM/Camera.
  3. Remote folder: путь на удалённом устройстве (браузер откроется через тот же прокси).
  4. Sync type: Local to Remote.
  5. Schedule: по таймеру или Instant Sync (сразу при новом файле, больше расход батареи).

Диагностика проблем

Симптом Причина Решение
Прокси постоянно «падает» / приложение синхронизации теряет соединение Android/OEM убивает фоновый процесс без разрешения на работу в фоне Кнопка «Disable battery optimization» в секции прокси → Allow
Test connection в FolderSync не проходит Прокси не запущен, или скопирован не тот порт Убедиться, что в приложении видно «Proxy running: 127.0.0.1:XXXXX», использовать именно этот порт
После нового соединения адрес изменился Порт зависит от ID соединения — новое соединение = новый ID = новый порт Ожидаемо для нового соединения; для одного и того же сохранённого соединения порт стабилен
В файловом менеджере не видно соединения Менеджер не поддерживает SAF/DocumentsProvider Использовать SAF-совместимый менеджер (Total Commander с content-плагином, X-plore, Material Files)
«Sync now» / «Auto backup» грузит не все файлы Файл с таким же именем уже существует на удалённой стороне Так и задумано — существующие файлы не перезаписываются автоматически
«Auto backup» срабатывает нерегулярно Android откладывает фоновые задачи без исключения из оптимизации батареи Кнопка «Disable battery optimization» → Allow

Ссылки