Доброго времени суток хабрасообщество. Продолжаю цикл статей по программированию для Maemo. Ранее я писал как установить и настроить SDK в «гибридном» режиме — пишем на родной ОС, а собираем и запускаем на виртуальной машине.
Некоторым показалось, что начать программировать для Maemo тяжело. Именно поэтому я решил начать с демонстрации легкого пути «Easy way» ©, чтоб показать как легко начать. Далее, учитывая выход официального релиза t 4.6.2 для maemo 5, я покажу как поставить этот релиз на Fremantle SDK. Продемонстрирую отладку в эмуляторе. И самое главное, как отлаживать приложение на устройстве используя обычное сетевое подключение и подключение по USB.
Результатом нашего труда будет вот такое вот окошечко на устройстве:
Примечание: в качестве IDE используется Scratchbox, так как речь идет о Fremantle SDK. QtQreator можно использовать, но как таковой поддержки Fremantle в нем нет и не будет. Почему? Да потому-что в нем делают поддержку нового, кросс-платформенного SDK — MADDE, о котором я уже упоминал (и упомяну еще в заключении).
Ну раз вы под катом, то значит решились на прочтение моей статьи.
Все видео здесь не очень хорошего качества, на YouTube'e можно посмотреть их в HD формате, для этого достаточно два раза кликнуть по видео.
Начнем с начала, в данной точке предположим, что предыдущую статью вы либо не читали, либо решили не проходитьтернистый немножко длинный путь по установке SDK. Но если бы вы прошли по первому пути, то в качестве приза результата Вы получили бы удобную среду для разработки в родной ОС (лично мое мнение конечно).
Но еслиВы ленивый по каким-либо причинам Вам не подходит описанный мной вариант, предлагаю другой, более легкий и простой.
Если у Вас уже стоит Fremantle SDK, то можете пропустить этот шаг и перейти сразу ко второму шагу.
Для установки SDK необходимо скачать:
и далее действуем согласно видео, там вроде все наглядно:
Заметки: устанавливайте дополнения гостевой ОС непосредственно из самого VirtualBox, а не те, которые включены в сам SDK (ссылка на них на рабочем столе). Их нигде качать не нужно, они уже идут с самим VirtualBox и дистрибутив подключается как виртуальный образ диска.
Как Вы видите, установка, настройка и запуск приложения занимает менее 10 минут, в отличие от описанного мною ранее метода. Все очень просто
С этого момента не важно, используете вы способ установки предложенный из предыдущей статьи или же из пункта 1. Всё актуально для обоих случаев установки.
тут последовательность такова:
Сначала мы удаляем установленный в SDK Qt 4.5.
и затем установить официальный Qt 4.6.2 для Maemo5:
Причем сделать это нужно для обоих целей ARMEL и x86. Цель x86 нужна для запуска и отладки в эмуляторе, а цель ARMEL для запуска и отладки на устройстве (кросскомпиляция). Переключаться между целями в scratchbox можно с помощью меню:
Теперь внимание!!!! Сеть в scratchbox может не работать (при запуске команды для установки пакетов могут быть ошибки с сетью). Это связано с небольшими проблемами в scratchbox. Их легко устранить. Для этого вне scratchbox нужно скопировать для каждой цели и для самого scratchbox файлик resolv.conf, который вы получили по DHCP либо сформировали в процессе настройки статической сети (явно или косвенно через утилиты):
Еще имейте ввиду, что в случае использования прокси, Вам нужно экспортировать переменные окружения:
Это можно вынести в отдельный скрипт или добавить эти строки в ~/.bashrc файл или указать proxy для apt-get:
В этом случае apt-get будет работать через этот proxy.
также перед установкой пакетов Qt будет не лишним обновить пакеты для каждой цели в scratchbox (вообще все команды, начинающиеся с «fakeroot» выполняются только внутри scratchbox, а sudo вне его):
После этого создаем проект Qt — «Qt Hello World» и в качестве конфигураций сборки выбираем все цели для ARMEL и X86 (ведь мы планируем отлаживать как в эмуляторе так и на устройстве).
Для сборки проекта Qt этого недостаточно, дело в том, что ESBox не знает о существовании официального Qt, который устанавливается в /opt/qt4-maemo5 в отличие от неофициального, который интегрируется в систему (раскидывается по разным каталогам, qmake допустим лежит в /usr/local/bin, include лежит в /usrt/include/qt4 и тд.). В принципе, поведение неофициального пакета Qt — стандартное, но в таком случае тяжело иметь дело с несколькими версиями, видимо поэтому Qt-шники решили не раскидывать пакет по всей системе. Поправить это можно двумя методами, при создании проекта просто поменять все пути к Include и qmake, но можно сделать проще, а точнее сделать символические ссылки:
для qmake (внимание у меня опечатка в комментариях на видео, там в пути вместо «dev» нужно писать «bin», увы поправить не могу по техническим причинам):
проверяем, что qmake доступен без указания пути:
должна появиться подсказка для qmake, и в начале указан версия Qt, должна быть 4.6.2
для include:
это нужно для ESBox.
Проделать эту операцию нужно для каждой цели сборки scratchbox (ARMEL и X86), чтоб не оказалось, что в терминале вы отлаживаетесь с одной версией Qt, а на устройстве с другой :-). Вы помните, что для переключения цели в scratchbox нужно воспользоваться утилиткой «sb-menu».
Потом собираем наше приложение для эмулятора (X86-develop) и создаем конфигурацию отладки (локальную). Запускаем, соглашаемся на приглашение запустить эмулятор. Вы увидите что программа остановилась на точке входа в «main» функцию и заработал HelloWorld. Все работает хорошо. Ура!!!
Теперь запустим отладку на устройстве. Сначала я решил продемонстрировать отладку по сети. Все что для этого нужно — это установить gdb сервер на устройстве (для отладки) и ssh server (и клиент тоже не помешает).
Open SSH клиент и сервер можно установить с помощью этого метапакета: maemo.org/downloads/product/Maemo5/openssh. Находятся он в репозитории repository.maemo.org/extras. Как установить новый репозиторий вы можете подсмотреть в моей статье. Также можно зайти по ссылке на приложение и нажать кнопку «Install» прям на устройстве.
Установить gdb можно из репозиториев maemo прям на устройстве, находится он в репозиториях
Просто добавьте эти строки в файл /etc/apt/sources.list на устройстве (или через стандартный менеджер пакетов), для этого надо быть суперпользователем, чтоб перейти в этот режим на устройстве нужно ввести команду:
и потом ввести:
Все это можно сделать через ssh, не обязательно писать это все руками на клавиатурке :-).
Второй путь — это вручную скачать пакет gdb и поставить его с помощью dpkg (я сделал именно так).
Заходим и скачиваем на устройство по этой ссылке пакет. И сохраните на устройстве. Потому в консоли (опять же можно по ssh) зайдите туда и введите:
В scratchbox GDB уже стоит.
В настройках ESBox создаем устройство и прописываем IP N900 в качестве «Host Name». Создаем конфигурацию запуска на удаленном хосте (в нашем случае это N900) выставляем способ доставки приложения SSH.
Есть два вариант — SBRSH и SSH.
SBRSH — это когда устройство монтируем папку с приложением у себя в файловой системе и с этого места запускает. Плюс: быстрее все происходит. Минус: устройство должно видеть ваш компьютер (для виртуальной системы должен стоять режим Bridge а не NAT или же перебросить порты) и на SDK-хосте должен стоять SSH сервер.
SSH — проект копируется по SCP на N900 и оттуда запускается. Плюс: виртуальная машина может быть в режиме Bridge. Минус: немного медленнее.
Я выбрал второй вариант, но вы можете выбирать сами, настройки там не сильно отличаются (правда в видео я сначала создал SBRSH, но потом поменял на SSH).
В качестве «Remote Connection», удаленного соединения, выбираем ранее настроенное устройство и запускаем на отладку.
При старте попросят ввести пароль для пользователя user. (Пароль «maemo»). Лучше кликнуть чекбокс «Save password», а то он много раз будет спрашивать пароль, напрягает :-)
И вуаааалляяяя, запустилось и остановилось на точке останова, и на экране устройства появилось тоже приложение, что и на эмуляторе (поверьте мне на слово, а лучше проверьте у себя сами :-) ).
Недостаток отладки по сети: медленно. Но на помощь на придет USB соединение. По факту это тоже отладка по сети, так как создается сетевой интерфейс по USB, через который и отлаживается приложение. Но так, как он по факту «точка-точка», то за счет этого и быстрее происходит.
Подготовка: необходимо поставить пакет pc-connectivity на устройстве, на виртуалке она уже стоит. Находится она в репозитории Extras. Очень мощный инструмент, унаследованный с предыдущих версий Maemo. Вкратце: он позволяет создавать профили соединений, для каждого профиля можно отдельно настроить соединения по USB, Wifi и Bluetooth. Да, отлаживаться можно и по bluetooth, но я не пробовал. Отладка по Wifi создает точку доступа с DHCP сервером. Полную документацию можно найти тут. Но не пугайтесь очень большим объемом документации. В нашем случае ее читать не обязательно :-).
Необходимо запустить из строки состояния (то меню, которое появиться если нажать на ту область, где часики :-) ) pc-connectivity и установить чекбокс «USB», нажать кнопку «Apply» и подключить устройство по USB к компьютеру (скриншот сделать не получилось, сфоткал на другой телефон).
После этого у нас появится новый интерфейс «usb» сетевой. По умолчанию все уже настроено и в качестве устройств в ESBox можно использовать уже предустановленное устройство USB c с сетевым адресом 192.168.2.15, виртуальная таблица получит адрес 192.168.2.14. Но если у вас это адресное пространство уже занято, то придется поменять его на другое. Настройки PC-connectivity можно найти в стандартном меню настроек N900.
После этого проверяем соединение — заходим на устройство по SSH.
Ну и все что осталось — это создать конфигурацию отладки для этого соединения и запустить непосредственно на устройстве.
Как вы можете видеть, все очень просто. Начать писать для Maemo5, имея при себе устройство или нет, не составляет особого труда. Но лично мне не нравиться, что я не могу использовать Qt-creator. Конечно можно код править даже на расшареных папках между виртуальной машиной и хостом, а потом руками все это запускать либо в эмуляторе или на устройстве и уже отлаживать в Gdb руками, или использовать ESBox. Но я уже сильно привык к Qt-Creator'у.
Но решение есть — MADDE. Это совсем другая SDK и официальной поддержки еще нет (находится в Developer Preview) и в Qt-Creator'е нет поддержки MADDE (в официальном релизе), но все это обещают к релизу версии Qt 4.7. Но тем не менее, этим всем можно пользоваться прямо сейчас (используя main ветку из git-репозитория или использую последние «снимки»), причем на любой ОС без использования виртуальных машин. Qt-Creator в Gitorious в master ветке уже достаточно неплохо работает с MADDE. Сейчас в MADDE не хватает двух основных вещей — эмулятора и обновления пакетов. Если у вас есть устройство, на котором вы хотите отлаживаться и готовы устанавливать нужные пакеты руками, то MADDE вам подойдет.
В следующей статье для разработчиков я опишу процесс настройки и работы с MADDE.
Всем приятного коддинга :-)
P.S.: как всегда, приглашаю посетить мой блог, там есть информация на английском (правда с запозданием). You can find English version on my blog erudenko.com
P.S.: Извиняюсь за 6 смайликов в статье, я понимаю, что сайт серьезный, но я очень веселый челочек и не могу удержаться :-) (ой опять смайлик :-), ойй опять .....)
Некоторым показалось, что начать программировать для Maemo тяжело. Именно поэтому я решил начать с демонстрации легкого пути «Easy way» ©, чтоб показать как легко начать. Далее, учитывая выход официального релиза t 4.6.2 для maemo 5, я покажу как поставить этот релиз на Fremantle SDK. Продемонстрирую отладку в эмуляторе. И самое главное, как отлаживать приложение на устройстве используя обычное сетевое подключение и подключение по USB.
Результатом нашего труда будет вот такое вот окошечко на устройстве:
Примечание: в качестве IDE используется Scratchbox, так как речь идет о Fremantle SDK. QtQreator можно использовать, но как таковой поддержки Fremantle в нем нет и не будет. Почему? Да потому-что в нем делают поддержку нового, кросс-платформенного SDK — MADDE, о котором я уже упоминал (и упомяну еще в заключении).
Ну раз вы под катом, то значит решились на прочтение моей статьи.
1. Установка SDK и запуск HelloWorld в эмуляторе.
Все видео здесь не очень хорошего качества, на YouTube'e можно посмотреть их в HD формате, для этого достаточно два раза кликнуть по видео.
Начнем с начала, в данной точке предположим, что предыдущую статью вы либо не читали, либо решили не проходить
Но если
Если у Вас уже стоит Fremantle SDK, то можете пропустить этот шаг и перейти сразу ко второму шагу.
Для установки SDK необходимо скачать:
- Fremantle SDK Virtual Image — файл по имени Maemo_Ubuntu_Intrepid_Desktop_SDK_Virtual_Image_Final.7z.
- опционально 7ip архиватор, если у вас его нет (берите любой).
- VirtualBox или quemu или VMWare. В моем примере я использую VirtualBox.
и далее действуем согласно видео, там вроде все наглядно:
Заметки: устанавливайте дополнения гостевой ОС непосредственно из самого VirtualBox, а не те, которые включены в сам SDK (ссылка на них на рабочем столе). Их нигде качать не нужно, они уже идут с самим VirtualBox и дистрибутив подключается как виртуальный образ диска.
Как Вы видите, установка, настройка и запуск приложения занимает менее 10 минут, в отличие от описанного мною ранее метода. Все очень просто
2. Установка Qt 4.6.2, и создание и запуск Qt приложения в эмуляторе.
С этого момента не важно, используете вы способ установки предложенный из предыдущей статьи или же из пункта 1. Всё актуально для обоих случаев установки.
тут последовательность такова:
Сначала мы удаляем установленный в SDK Qt 4.5.
fakeroot apt-get remove libqtv4*
и затем установить официальный Qt 4.6.2 для Maemo5:
fakeroot apt-get install libqt4-maemo5-dev
Причем сделать это нужно для обоих целей ARMEL и x86. Цель x86 нужна для запуска и отладки в эмуляторе, а цель ARMEL для запуска и отладки на устройстве (кросскомпиляция). Переключаться между целями в scratchbox можно с помощью меню:
sb-menu
Теперь внимание!!!! Сеть в scratchbox может не работать (при запуске команды для установки пакетов могут быть ошибки с сетью). Это связано с небольшими проблемами в scratchbox. Их легко устранить. Для этого вне scratchbox нужно скопировать для каждой цели и для самого scratchbox файлик resolv.conf, который вы получили по DHCP либо сформировали в процессе настройки статической сети (явно или косвенно через утилиты):
sudo cp /etc/resolv.conf /scratchbox/etc
sudo cp /etc/resolv.conf /scratchbox/users/maemo/targets/FREMANTLE_ARMEL/etc
sudo cp /etc/resolv.conf /scratchbox/users/maemo/targets/FREMANTLE_X86/etc
Еще имейте ввиду, что в случае использования прокси, Вам нужно экспортировать переменные окружения:
export http_proxy=…
export https_proxy=…
Это можно вынести в отдельный скрипт или добавить эти строки в ~/.bashrc файл или указать proxy для apt-get:
echo 'Acquire::http::Proxy "http://aptcache:3142";' > /etc/apt/apt.conf.d/99proxy
В этом случае apt-get будет работать через этот proxy.
также перед установкой пакетов Qt будет не лишним обновить пакеты для каждой цели в scratchbox (вообще все команды, начинающиеся с «fakeroot» выполняются только внутри scratchbox, а sudo вне его):
fakeroot apt-get update
После этого создаем проект Qt — «Qt Hello World» и в качестве конфигураций сборки выбираем все цели для ARMEL и X86 (ведь мы планируем отлаживать как в эмуляторе так и на устройстве).
3. Настройка и запуск приложения в локальном эмуляторе и на на устройстве через сеть (по WiFi в моем случае).
Для сборки проекта Qt этого недостаточно, дело в том, что ESBox не знает о существовании официального Qt, который устанавливается в /opt/qt4-maemo5 в отличие от неофициального, который интегрируется в систему (раскидывается по разным каталогам, qmake допустим лежит в /usr/local/bin, include лежит в /usrt/include/qt4 и тд.). В принципе, поведение неофициального пакета Qt — стандартное, но в таком случае тяжело иметь дело с несколькими версиями, видимо поэтому Qt-шники решили не раскидывать пакет по всей системе. Поправить это можно двумя методами, при создании проекта просто поменять все пути к Include и qmake, но можно сделать проще, а точнее сделать символические ссылки:
для qmake (внимание у меня опечатка в комментариях на видео, там в пути вместо «dev» нужно писать «bin», увы поправить не могу по техническим причинам):
ln -s /opt/qt4-maemo5/bin/qmake /usr/local/bin
проверяем, что qmake доступен без указания пути:
qmake
должна появиться подсказка для qmake, и в начале указан версия Qt, должна быть 4.6.2
для include:
ln -s /opt/qt4-maemo5/include /usr/local/qt4
это нужно для ESBox.
Проделать эту операцию нужно для каждой цели сборки scratchbox (ARMEL и X86), чтоб не оказалось, что в терминале вы отлаживаетесь с одной версией Qt, а на устройстве с другой :-). Вы помните, что для переключения цели в scratchbox нужно воспользоваться утилиткой «sb-menu».
Потом собираем наше приложение для эмулятора (X86-develop) и создаем конфигурацию отладки (локальную). Запускаем, соглашаемся на приглашение запустить эмулятор. Вы увидите что программа остановилась на точке входа в «main» функцию и заработал HelloWorld. Все работает хорошо. Ура!!!
Теперь запустим отладку на устройстве. Сначала я решил продемонстрировать отладку по сети. Все что для этого нужно — это установить gdb сервер на устройстве (для отладки) и ssh server (и клиент тоже не помешает).
Open SSH клиент и сервер можно установить с помощью этого метапакета: maemo.org/downloads/product/Maemo5/openssh. Находятся он в репозитории repository.maemo.org/extras. Как установить новый репозиторий вы можете подсмотреть в моей статье. Также можно зайти по ссылке на приложение и нажать кнопку «Install» прям на устройстве.
Установить gdb можно из репозиториев maemo прям на устройстве, находится он в репозиториях
deb repository.maemo.org fremantle/sdk free non-free
deb repository.maemo.org fremantle/tools free non-free
Просто добавьте эти строки в файл /etc/apt/sources.list на устройстве (или через стандартный менеджер пакетов), для этого надо быть суперпользователем, чтоб перейти в этот режим на устройстве нужно ввести команду:
sudo gainroot
и потом ввести:
apt-get update
apt-get install gdb
Все это можно сделать через ssh, не обязательно писать это все руками на клавиатурке :-).
Второй путь — это вручную скачать пакет gdb и поставить его с помощью dpkg (я сделал именно так).
Заходим и скачиваем на устройство по этой ссылке пакет. И сохраните на устройстве. Потому в консоли (опять же можно по ssh) зайдите туда и введите:
dpkg -i gdb_6.8.50.20090417-0maemo2+0m5_armel.deb
В scratchbox GDB уже стоит.
В настройках ESBox создаем устройство и прописываем IP N900 в качестве «Host Name». Создаем конфигурацию запуска на удаленном хосте (в нашем случае это N900) выставляем способ доставки приложения SSH.
Есть два вариант — SBRSH и SSH.
SBRSH — это когда устройство монтируем папку с приложением у себя в файловой системе и с этого места запускает. Плюс: быстрее все происходит. Минус: устройство должно видеть ваш компьютер (для виртуальной системы должен стоять режим Bridge а не NAT или же перебросить порты) и на SDK-хосте должен стоять SSH сервер.
SSH — проект копируется по SCP на N900 и оттуда запускается. Плюс: виртуальная машина может быть в режиме Bridge. Минус: немного медленнее.
Я выбрал второй вариант, но вы можете выбирать сами, настройки там не сильно отличаются (правда в видео я сначала создал SBRSH, но потом поменял на SSH).
В качестве «Remote Connection», удаленного соединения, выбираем ранее настроенное устройство и запускаем на отладку.
При старте попросят ввести пароль для пользователя user. (Пароль «maemo»). Лучше кликнуть чекбокс «Save password», а то он много раз будет спрашивать пароль, напрягает :-)
И вуаааалляяяя, запустилось и остановилось на точке останова, и на экране устройства появилось тоже приложение, что и на эмуляторе (поверьте мне на слово, а лучше проверьте у себя сами :-) ).
4. Настройка и запуск приложения на устройстве через USB соединение.
Недостаток отладки по сети: медленно. Но на помощь на придет USB соединение. По факту это тоже отладка по сети, так как создается сетевой интерфейс по USB, через который и отлаживается приложение. Но так, как он по факту «точка-точка», то за счет этого и быстрее происходит.
Подготовка: необходимо поставить пакет pc-connectivity на устройстве, на виртуалке она уже стоит. Находится она в репозитории Extras. Очень мощный инструмент, унаследованный с предыдущих версий Maemo. Вкратце: он позволяет создавать профили соединений, для каждого профиля можно отдельно настроить соединения по USB, Wifi и Bluetooth. Да, отлаживаться можно и по bluetooth, но я не пробовал. Отладка по Wifi создает точку доступа с DHCP сервером. Полную документацию можно найти тут. Но не пугайтесь очень большим объемом документации. В нашем случае ее читать не обязательно :-).
Необходимо запустить из строки состояния (то меню, которое появиться если нажать на ту область, где часики :-) ) pc-connectivity и установить чекбокс «USB», нажать кнопку «Apply» и подключить устройство по USB к компьютеру (скриншот сделать не получилось, сфоткал на другой телефон).
После этого у нас появится новый интерфейс «usb» сетевой. По умолчанию все уже настроено и в качестве устройств в ESBox можно использовать уже предустановленное устройство USB c с сетевым адресом 192.168.2.15, виртуальная таблица получит адрес 192.168.2.14. Но если у вас это адресное пространство уже занято, то придется поменять его на другое. Настройки PC-connectivity можно найти в стандартном меню настроек N900.
После этого проверяем соединение — заходим на устройство по SSH.
Ну и все что осталось — это создать конфигурацию отладки для этого соединения и запустить непосредственно на устройстве.
Заключение.
Как вы можете видеть, все очень просто. Начать писать для Maemo5, имея при себе устройство или нет, не составляет особого труда. Но лично мне не нравиться, что я не могу использовать Qt-creator. Конечно можно код править даже на расшареных папках между виртуальной машиной и хостом, а потом руками все это запускать либо в эмуляторе или на устройстве и уже отлаживать в Gdb руками, или использовать ESBox. Но я уже сильно привык к Qt-Creator'у.
Но решение есть — MADDE. Это совсем другая SDK и официальной поддержки еще нет (находится в Developer Preview) и в Qt-Creator'е нет поддержки MADDE (в официальном релизе), но все это обещают к релизу версии Qt 4.7. Но тем не менее, этим всем можно пользоваться прямо сейчас (используя main ветку из git-репозитория или использую последние «снимки»), причем на любой ОС без использования виртуальных машин. Qt-Creator в Gitorious в master ветке уже достаточно неплохо работает с MADDE. Сейчас в MADDE не хватает двух основных вещей — эмулятора и обновления пакетов. Если у вас есть устройство, на котором вы хотите отлаживаться и готовы устанавливать нужные пакеты руками, то MADDE вам подойдет.
В следующей статье для разработчиков я опишу процесс настройки и работы с MADDE.
Всем приятного коддинга :-)
P.S.: как всегда, приглашаю посетить мой блог, там есть информация на английском (правда с запозданием). You can find English version on my blog erudenko.com
P.S.: Извиняюсь за 6 смайликов в статье, я понимаю, что сайт серьезный, но я очень веселый челочек и не могу удержаться :-) (ой опять смайлик :-), ойй опять .....)