![image](https://habrastorage.org/storage/habraeffect/0a/46/0a4659da3af20ff85abc171f0b5ddeb6.png)
Для меня стало неприятной неожиданностью, что для Android не существует готового решения для автоматической синхронизации файлов с компьютером по воздуху. Даже на моем стареньком SE W810i можно было включить bluetooth, запустить программу, и она сразу автоматически скачивала на компьютер новые фотографии, сообщения и т.д., а также отправляла в обратном направлении свежую музыку.
Обзор претендентов на «готовое решение» и моя собственная реализация — под катом.
Сначала очерчу желаемый функционал:
1. Чтобы все новые фотографии закачивались в указанную папку.
2. Чтобы можно было сделать на компьютере папку, куда можно будет записывать какие-нибудь файлы, а после синхронизации они окажутся в указанной папке телефона (к примеру, закачивание свежей музыки на телефон).
Теперь можно отправляться на поиски.
Претенденты на «готовое решение»
Dropbox
(Windows, Mac OS, Linux)![](https://habrastorage.org/storage/habraeffect/26/92/2692b5f617110517f7d3b4c5d6b7187f.jpg)
К сожалению, Dropbox for Android не поддерживает автоматическую синхронизацию данных. Придется закачивать каждую фотку вручную. Есть надежда на сторонний клиент Droidbox, автор которого обещал ее реализовать, но, во-первых пока что это остается только обещанием, а во-вторых приложение платное. Не подходит.
SugarSync
(Windows, Mac OS)![](https://habrastorage.org/storage/habraeffect/07/02/0702bed18d888e0ec0df19668f2ef6cf.png)
У идентичного Dropbox'у сервиса под названием SugarSync есть свое приложение под Android. Но если я все-таки смог заметить малюсенькую ссылочку на регистрацию бесплатного аккаунта (который вмещает себя 2 гигабайта), то заставить клиент для телефона соединиться с их сервером у меня не получилось ни по WI-FI, ни по GPRS. К сожалению, по описанию на сайте не очень понятно есть ли функция автоматической синхронизации, так что вопрос остается открытым.
The Missing Sync
(Windows, Mac OS)![картинка с сайта android.tl](https://habrastorage.org/storage/habraeffect/27/92/27923b48b3e60f55690beae735383ab0.jpg)
Судя по описанию на сайте, это приложение умеет все, что мне надо (и даже больше). Среди заявленных функций синхронизация закладок браузера, контактов, заметок, истории звонков, SMS, автоматическая конвертация и закачка видео, и много еще чего. Но программа не бесплатная и стоит $39.95, что для меня явно дороговато. Кроме того, прогулявшись по зарубежным форумам, я прочитал немало негативных отзывов об этой программе.
DoubleTwist
(Windows, Mac OS)![](https://habrastorage.org/storage/habraeffect/d5/8b/d58b1b27e3f7dab967551fa5c4bac45e.png)
Программа, которую TechCrunch громко охарактеризовал «iTunes для Android», если верить цитате на сайте. По идее умеет синхронизировать музыку, видео и картинки. Мой телефон она не определила, а в списке среди возможных девайсов из знакомых названий был только Windows Mobile.
Но главная проблема в том, что она соединяется с компьютером по USB-кабелю и работает с ним как с флешкой. С таким подходом можно вообще использовать для синхронизации любую программу для автоматического бекапа данных, наша цель ведь была синхронизация по воздуху. Кроме того автоматически она может работать только в направлении «компьютер → телефон» и не умеет синхронизировать какие-либо другие форматы, кроме вышеуказанных.
Свой способ
Для себя я решил эту проблему таким образом: на телефоне поднимается FTP-сервер, а на компьютере запускается программа, которая автоматически заходит на него и делает все нужные мне манипуляции.
Что надо?
1. SwiFTP — бесплатный простенький FTP-сервер, разрешает настроить имя-пароль для доступа, корневую папку и зону доступности сервера (WI-FI и/или GPRS/3G).
![](https://habrastorage.org/getpro/geektimes/post_images/a9c/812/4ad/a9c8124adac12df0f263f7293166baab.png)
(альтернативы: FTPServer и On Air)
2. WI-FI роутер (в настройках DHCP-сервера сделайте привязку IP к MAC-адресу телефона — это надо чтобы компьютер всегда четко знал по какому айпи ему надо коннектиться к FTP), либо рутованная прошивка и программа Wireless Tether for Root Users, которая делает из телефона точку доступа WI-FI (привет обладателям Nexus One с Froyo на борту, в котором есть нативная поддержка WI-FI tethering!).
3. Программа WinSCP
— FTP-клиент, который имеет функцию синхронизации и поддерживает автоматизацию посредством скриптов.
Что делать?
Сначала устанавливаем SwiFTP, заходим в настройки, указываем логин и пароль по своему желанию, отмечаем чекбокс «Accept connections from WI-FI». Сохраняем. Запускаем сервер кнопкой «Start».
![](https://habrastorage.org/storage/habraeffect/ec/a4/eca40947e4a9b72b5cfa4e0c6f08c84a.jpg)
![](https://habrastorage.org/storage/habraeffect/0d/9a/0d9a1c66e3b9fca291b76720b1cf37b0.jpg)
Потом устаналиваем WinSCP, добавляем туда наш FTP-сервер под именем «android» (можно и другое, но не забудьте поменять его название в скрипте ниже).
Теперь самое интересное: скрипт синхронизации. Сразу же дам ссылку на документацию по скриптованию для WinSCP для тех, кто захочет переделать под себя.
Далее в качестве примера будет приведен мой скрипт, вот что он делает:
1. Скачивает в папку photos все фотографии (файлы из папки телефона images), которых еще нету на компьютере
2. Закачивает в папку телефона docs/new файлы из папки компьютера files\new (обычно у меня apk-файлы приложений, текстовые файлы и т.д.)
3. Закачивает в папку телефона music файлы из папки to_music
4. Создает (если еще нету) в папке files на компьютере новую папку с сегодняшней датой и перемещает туда уже закачанные файлы из files\new
5. Удаляет закачанную на телефон музыку с папки компьютера to_music
Создаем файл android_sync.bat, который будем запускать для начала синхронизации.
# Запускаем клиент, передаем ему
# скрипт, код которого находится ниже
# (следите за путями)
"C:\Program Files\WinSCP\winscp.com" /script="C:\Program Files\WinSCP\android_sync.txt"
# Создаем папку с сегодняшней датой
IF NOT EXIST "D:\mobile\files\%Date%\" MKDIR "D:\mobile\files\%Date%\"
# Перемещаем уже закачанные на телефон
# файлы в созданную папку
MOVE D:\mobile\files\new\*.* D:\mobile\files\%Date%
# Удаляем уже закачанную
# на телефон музыку
DEL D:\mobile\to_music\*.*
EXIT
Создаем файл android_sync.txt, где будет храниться скрипт для WinSCP.
# Включаем «пакетный режим», чтобы во время
# синхронизации клиент нас не спрашивал
# точно ли мы хотим перезаписать файлы и т.п.
option batch on
option confirm off
# Подключаемся к FTP-серверу
open android
# Синхронизируем фотографии. local означает,
# что изменения на стороне телефона применяются
# на компьютере, т.е. синхронизация идет
# в режиме «чего нет на компьютере, но есть
# на телефоне закачать на компьютер»
synchronize local d:\mobile\photos /images
# Закачиваем на телефон новые файлы из
# папки на компьютере files\new в папку
# docs/new на телефоне. remote означает,
# что изменения на компьютере применяются
# на телефоне
synchronize remote d:\mobile\files\new /docs/new
# Закачиваем на телефон новую музыку
synchronize remote d:\mobile\to_music /music
# Отключаемся, заканчиваем работу клиента
close
exit
Как использовать?
Теперь можно вынести ярлык на android_sync.bat на рабочий стол. Таким образом, вся синхронизация сводится к нескольким кликам: запуск FTP-сервера, вызов android_sync.bat по ярлыку на рабочем столе, выключение FTP-сервера. Если у вас нет WI-FI роутера, то с запуском-остановкой Wireless Tether становится еще на пару кликов больше. Можно вообще свести количество телодвижений к минимуму, если держать FTP-сервер постоянно включенным и поместить синхронизацию в планировщик задач.
Очевидно, способ с FTP-сервером можно использовать не только под Windows, но выбранный мною клиент WinSCP не кроссплатформенен, а я ни с какими другими ОС достаточно тесно не знаком. Если кто-то в комментариях опишет аналогичный процесс для других ОС, я обязательно его добавлю в топик.
Кроме того, если вы знаете еще какие-то способы организации синхронизации с компьютером смартфона на Android или у вас есть предложения как улучшить приведенный способ — напишите пожалуйста в комментариях.