24 May 2010

Синхронизация смартфона с компьютером по воздуху

Development for Android
image
Для меня стало неприятной неожиданностью, что для Android не существует готового решения для автоматической синхронизации файлов с компьютером по воздуху. Даже на моем стареньком SE W810i можно было включить bluetooth, запустить программу, и она сразу автоматически скачивала на компьютер новые фотографии, сообщения и т.д., а также отправляла в обратном направлении свежую музыку.

Обзор претендентов на «готовое решение» и моя собственная реализация — под катом.

Сначала очерчу желаемый функционал:
1. Чтобы все новые фотографии закачивались в указанную папку.
2. Чтобы можно было сделать на компьютере папку, куда можно будет записывать какие-нибудь файлы, а после синхронизации они окажутся в указанной папке телефона (к примеру, закачивание свежей музыки на телефон).

Теперь можно отправляться на поиски.

Претенденты на «готовое решение»



Dropbox

(Windows, Mac OS, Linux)


К сожалению, Dropbox for Android не поддерживает автоматическую синхронизацию данных. Придется закачивать каждую фотку вручную. Есть надежда на сторонний клиент Droidbox, автор которого обещал ее реализовать, но, во-первых пока что это остается только обещанием, а во-вторых приложение платное. Не подходит.

SugarSync

(Windows, Mac OS)


У идентичного Dropbox'у сервиса под названием SugarSync есть свое приложение под Android. Но если я все-таки смог заметить малюсенькую ссылочку на регистрацию бесплатного аккаунта (который вмещает себя 2 гигабайта), то заставить клиент для телефона соединиться с их сервером у меня не получилось ни по WI-FI, ни по GPRS. К сожалению, по описанию на сайте не очень понятно есть ли функция автоматической синхронизации, так что вопрос остается открытым.

The Missing Sync

(Windows, Mac OS)


Судя по описанию на сайте, это приложение умеет все, что мне надо (и даже больше). Среди заявленных функций синхронизация закладок браузера, контактов, заметок, истории звонков, SMS, автоматическая конвертация и закачка видео, и много еще чего. Но программа не бесплатная и стоит $39.95, что для меня явно дороговато. Кроме того, прогулявшись по зарубежным форумам, я прочитал немало негативных отзывов об этой программе.

DoubleTwist

(Windows, Mac OS)


Программа, которую TechCrunch громко охарактеризовал «iTunes для Android», если верить цитате на сайте. По идее умеет синхронизировать музыку, видео и картинки. Мой телефон она не определила, а в списке среди возможных девайсов из знакомых названий был только Windows Mobile.

Но главная проблема в том, что она соединяется с компьютером по USB-кабелю и работает с ним как с флешкой. С таким подходом можно вообще использовать для синхронизации любую программу для автоматического бекапа данных, наша цель ведь была синхронизация по воздуху. Кроме того автоматически она может работать только в направлении «компьютер → телефон» и не умеет синхронизировать какие-либо другие форматы, кроме вышеуказанных.

Свой способ


Для себя я решил эту проблему таким образом: на телефоне поднимается FTP-сервер, а на компьютере запускается программа, которая автоматически заходит на него и делает все нужные мне манипуляции.

Что надо?


1. SwiFTP — бесплатный простенький FTP-сервер, разрешает настроить имя-пароль для доступа, корневую папку и зону доступности сервера (WI-FI и/или GPRS/3G).


(альтернативы: 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».



Потом устаналиваем 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 или у вас есть предложения как улучшить приведенный способ — напишите пожалуйста в комментариях.
Tags:androidсинхронизациясинхронизация файловWI-FIWinSCPSwiFTPDropboxSugarSyncDoubleTwistThe Missing Sync
Hubs: Development for Android
+26
23.4k 51
Comments 36