В настоящей статье рассказывается о том как создавать приложения для Maemo, используя Python, начиная с настройки среды разработки и заканчивая созданием пакета, готового к установке и использованию. В качестве примера разрабатывается приложение Bluetooth-сканнера для Nokia N900.
Существенное большинство приложений для Maemo, написаны на C. Но программирование на C требует определенных навыков и знания платформы. Для Maemo 5 существует полнофункциональный интерпретатор языка Python с богатым набором библиотек. Используя его можно несложно создавать свои приложения для Maemo.
Обсудить статью можно на форуме.
Содержание |
Среда разработки
Интерпретатор Python доступен в виде пакета maemo-python-device-env в диспетчере приложений. Убедиться, что интерпретатор установился правильно, можно, открыв X Terminal и набрав команду python. После этого ты окажешься в приветственной консоли интерпретатора:
Python 2.5.4 (r254:67916, Oct 9 2009, 00:02:36) [GCC 4.2.1] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>>
В принципе можно попробовать запустить какой-нибудь несложный сценарий на Python'е уже сейчас, используя специально заготовленный bash-скрипт: run-standalone.sh <название_скрипта.py>. Для этого подошел бы стандартный текстовый редактор, но это не сильно удобно. Конечно, можно заниматься разработкой скрипта на компьютере и далее вручную перекидывать его на телефон по SSH/SCP или еще каким-нибудь, но и это не лучший вариант: о человеческой отладке пришлось бы забыть. Впрочем, все эти заботы не к чему, потому как для разработки Python-приложений для Maemo есть замечательная IDE — Pluthon. Основанная на всем известном Eclipse’е, она позволяет разрабатывать и отлаживать скрипт на компьютере, а тестировать его прямо на телефоне. Причем этот вариант подходит для любой платформы: винды, линукса или мака. Для запуска понадобится лишь скачать два архива с pluthon.garage.maemo.org и распаковать их в одну папку. Помимо этого требуется, чтобы в системе был установлен JRE (http://java.sun.com).
Подготовка проекта
Позаимствованный у PyDev редактор кода предоставляет все прелести IDE: автодополнение кода, сниппеты, подсказки — все, что и без того может ускорить разработку. Далее схема действия Pluthon очень простая: разрабатываемый скрипт по команде на запуск перебрасывается через SSH на телефон и уже на мобильной платформе начинается его исполнение. По этой причине важно, чтобы на N900 был установлен OpenSSH сервер, это легко делается через менеджер пакетов (подробнее читай в статье прошлого номера). Особенно приятно, что телефон вовсе необязательно подключать по USB к компьютеру: намного удобнее это сделать через беспроводные Bluetooth или Wi-fi. Попробуем?
Для начала создадим новый проект (меню File -> Pluthon Project -> Empty Python Project), далее жмем Next и выбираем способ удаленного подключения к телефону. Какой бы способ ты ни выбрал — USB, Bluetooth, WLAN ad-hoc — не поленись зайти в настройки. Здесь необходимо правильно указать IP-адрес девайса, а также имя пользователя для работы в системе. Чтобы не было проблем я обычно отлаживаю программы под рутом, хотя это и может быть небезопасно. Далее нажатием на кнопку Finish мы создаем проект.
Тут надо сказать, что по умолчанию Python установлен в «голом» виде, в нем практически нет готовых модулей. Поэтому все приходится устанавливать дополнительно в виде специального пакета PyMaemo, представляющего собой сборку сортированных модулей для платформы Maemo. Нас в первую очередь интересуют два модуля:
- PyMaemo/HildonDesktop, предоставляющий привязки для использования интерфейса Maemo;
- PyBluez — обертка для простого использования встроенного Bluetooth.
В ином бы случай, PyMaemo пришлось устанавливать вручную, но Pluthon в момент создания нового проекта предлагает проверить мобильное устройство на наличие необходимых для комфортной разработки библиотек. В случае необходимости, все подкачивается из инета и устанавливается автоматически, а тебе остается лишь смотреть на сообщения в логе.
Приступаем к разработке
Теперь, вернемся к нашей задаче — нам необходимо просканировать Bluetooth-эфир. Установив PyMaemo, который включает обертку PyBluez, мы сильно облегчили себе задачу, потому как у нас больше нет необходимости заморачиваться по поводу низкоуровнего взаимодействия с BT-модулем (вот они прелести Python!). Библиотека все сделает сама: главное не забыть ее импортировать, поэтому делаем это в первую очередь:
import bluetooth
Операция по поиску беспроводных устройств в эфире называется Discover и реализована в библиотеке bluetooth как один из методов. Причем в качестве параметров можно указать, определять ли имена устройств (их числовой идентификатор, например, step_nokia, N900-phone и т.д.) или нет. В ответ функция возвратит список, в котором будут имена устройств и их MAC-адреса — естественно в случае, если таковые имеются. Присвоим результат сканирования переменной nearby_devices:
nearby_devices = bluetooth.discover_devices(lookup_names = True)
Теперь остается только вывести результат сканирования. Для простоты примера представим, что имеем дело с обычном консольным приложением и для вывода будем использовать стандартную функцию для вывода текстовых данных:
print "found %d devices" % len(nearby_devices) for addr, name in nearby_devices: print " %s - %s" % (addr, name)
Теперь соединяем все вместе и через меню Run -> Run отдаем команду на запуск, предварительно проверив, что на телефоне включен Bluetooth. В момент первого запуска Pluthon поинтересуется, каким образом ему переносить исходник на мобильное устройство: безопасно монтировать удаленный диск или копировать скрипт по SSH. Второй вариант не требует настройки, поэтому будем использовать его. Единственное, что нужно, — это ввести пароль пользователя, который ты ранее указывал в момент настройки подключения. Если ты так же, как и я, указал root, то вспомни тот пароль, который указав в момент установки приложения rootsh.
В случае успеха, в панели для отладки PluThon отобразится вывод скрипта: имена всех найденных устройств, а также их MAC-адреса. Можно также запустить сценарий из консоли: передав название скрипта в качестве аргумента run-standalone.sh. Правда, прямо скажем, что на мобильное приложение это пока явно непохоже.
Создаем интерфейс через Qt
Чего не хватает нашей программе, так это полноценного графического интерфейса. К счастью, существует несколько вариантов наверстать упущенное. Можно, как и для более ранних версий Maemo, использовать библиотеку GTK. Но раз уж компания Nokia приобрела небезызвестный набор библиотек Qt и тем более портировала его для Maemo5, то было бы глупо отказываться от использования новой технологии. Причем если ты уже имел опыт разработки с использованием Qt, то ничего ровным счетом не изменится: на N900 все работает точно так же, как и под виндой или обычным линуксом. Вплоть до того, что можно взять готовые примеры и без труда запустить их на мобильной платформе!
Поскольку приложение мы разрабатываем на Python, то необходимо установить для Qt необходимые привязки: PyQt (www.riverbankcomputing.co.uk) или PySide (www.pyside.org). Мы будем использовать первый вариант. Для этого, как в Debian или Ubuntu воспользуемся пакетным менеджером apt-get. Открываем консоль, переходим в режим рута (sudo gainroot) и далее набираем команду для инсталляции PyQt (пакет называется python2.5-qt4):
apt-get install python2.5-qt4
Для того чтобы вникнуть в азы проектирования интерфейсов на Qt рекомендую прочитать очень доходчивый мануал, который выложен на диск. А пока попробуем на нашем примере разобрать общие черты приложения. Первым делом импортируем нужные библиотеки Qt:
import sys from PyQt4 import QtGui, QtCore import bluetooth
Далее создаем класс с нашим основным окном и обозначим для него заголовок «N900 Bluetooth-scanner»:
class MainWindow(QMainWindow):
def __init__(self, *args):
QMainWindow.__init__(self, *args)
self.setWindowTitle('N900 Bluetooth scanner')
Главным компонентом окна ListBox, в который мы поместим вывод информации о найденных устройствах:
self.listbox=AssociativeListBox(self)
Как и в предыдущем примере получаем информацию об устройствах в эфире с помощью метода discover_devices() и добавляем имя и MAC-адрес устройства в наш Listbox, используя цикл:
nearby_devices = bluetooth.discover_devices(lookup_names = True) for addr, name in nearby_devices: self.listbox.insertItem(addr, name)
Далее создаем экземпляр объект нашего окна и запускаем цикл с обработчиком событий:
app = QtGui.QApplication(sys.argv) qb = MainWindow() qb.show() sys.exit(app.exec_())
Теперь можно оформить наше приложение в виде Debian-пакета, готового к установке. В этом опять же нас выручит среда разработки Pluthon. Достаточно запустить специальный мастер через меню Export -> PluThon -> Export to Debian Package, после чего выбрав платформу Maemo, получить готовый к распространению пакет.
Дальнейшая разработка
Теперь, когда наша программа получило очертания обычного для N900 приложение и выполняет вполне конкретную цель, можно дополнить интерфейс дополнительными элементами. Я добавил кнопку «Начать сканирование» и реализовал сканирование эфира по запросу, а используя базу «MAC-адрес – производитель», реализовал определение имени производителя. Исходники мы выложили на наш DVD. Более того, возможности PyBluez позволяют легко определить, какие сервисы предоставляет беспроводное устройство, а значит, ты без труда сможешь реализовать и такую возможность!
Важно, что для начала разработки приложения не надо морочить голову с изучением новой платформы. Используя уже имеющиеся знаний Pythonа и библиотеку Qt, мы сходу смогли разработать работоспособное приложение для Nokia N900. Осталось выложить его в девелоперский репозитарий :).