Часто задаваемые разработчиками вопросы
Часто задаваемые разработчиками вопросы
Данная статья представляет собой список часто задаваемых вопросов, которые имеют отношение к разработке приложений для платформы Maemo или работе над самой платформой. Текст статьи будет постоянно изменяться. Приветствуются новые вопросы и ответы.
Чтобы получить ответы на вопросы пользователей, обратитесь, пожалуйста, в статью Часто задаваемые пользователями вопросы.
Что делать, если конкретный вопрос не встречается в данной статье?
1. Проверьте, обсуждался ли он уже в одном из списков почтовой рассылки или на форуме talk.maemo.org.
2. Если нет, опубликуйте свой вопрос в списке почтовой рассылки для разработчиков или на форуме talk.
3. Если ответ найден и он также может представлять интерес для других пользователей, опубликуйте его здесь. В таком случае, если в будущем данный вопрос возникнет снова, можно будет просто дать ссылку на данную страницу.
Комплект программ для разработки программного обеспечения Maemo и Scratchbox
Команда "dbus-monitor" не работает в Scratchbox. Что можно сделать?
Сообщения об ошибке
Типичные сообщения об ошибке в таком случае выглядят следующим образом:
X86: ~] > dbus-monitor --system Failed to open connection to system message bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
или для шины сессии:
X86: ~] > dbus-monitor Failed to open connection to session message bus: (null)
или при запуске приложений, написанных на Python:
arguments to dbus_connection_get_data() were incorrect, assertion "connection != NULL" failed in file dbus-connection.c GLIB ERROR ** default - Not enough memory to set up DBusConnection for use with GLib
Решение
- Проверено в Fremantle Beta, Beta_2
Введите следующие строки в Scratchbox:
X86: ~] > eval $(dbus-launch --sh-syntax) X86: ~] > export DBUS_SESSION_BUS_ADDRESS X86: ~] > export DBUS_SESSION_BUS_PID
После этого выполните команду dbus-monitor. Все должно заработать.
"xephyr" не запускается на хосте. Сообщается об ошибке безопасности dbus
Сообщения об ошибке [config/dbus] couldn't take over org.x.config: org.freedesktop.DBus.Error.AccessDenied (Connection ":1.310" is not allowed to own the service "org.x.config.display2" due to security policies in the configuration file)
Решение
Дисплей, который планируется использовать для Xephyr (обычно :2), просто необходимо добавить в файл безопасности dbus.
Необходимо отредактировать файл:
/etc/dbus-1/system.d/xorg-server.conf
Добавьте следующие три строки в группу "<policy context="default">
<allow own="org.x.config.display2"/> <allow send_destination="org.x.config.display2"/> <allow send_interface="org.x.config.display2"/>
В сущности, такая группа должна быть для каждого дисплея, который планируется использовать, дисплей 0 по умолчанию и дисплей 1 в файле. Если планируется использовать для Xephyr дисплей с номером, отличным от :2, убедитесь, что именно данный номер используется при добавлении данных строк, а не "display2".
Как избежать сообщений об "qemu" ошибке "af-sb-init start" в архитектуре ARMEL?
Сообщения об ошибке
Обычно попытка заканчивается примерно следующим образом:
The error was 'BadWindow (invalid Window parameter)'. (Details: serial 207 error_code 3 request_code 2 minor_code 0) (Note to programmers: normally, X errors are reported asynchronously; that is, you will receive the error a while after causing it. To debug your program, run it with the --sync command line option to change this behavior. You can then get a meaningful backtrace from your debugger if you break on the gdk_x_error() function.) aborting... qemu: uncaught target signal 6 (Aborted) - core dumped
Решение
- все комплекты программ для разработки программного обеспечения
Не следует использовать архитектуру ARMEL для тестирования приложений и даже для кросс-компилирования. Не предполагается, чтобы она это поддерживала. Пожалуйста, используйте архитектуру X86 для любых действий кроме кросс-компиляции.
Почему появляется сообщение "command not found", даже если выполняются инструкции в документации?
Сообщения об ошибке
В качестве примера:
X86: ~] > af-sb-init.sh start bash: af-sb-init.sh: command not found
Решение
После выполнения инсталляционного сценария необходимо инсталлировать некоторые пакеты с закрытым исходным кодом, чтобы полностью инсталлировать комплект программ для разработки программного обеспечения. Скорее всего, они не инсталлированы. Инструкции предлагаются здесь – последний пункт инструкций по инсталляции.
Как to разрешить проблему "Scratchbox devkit debian-etch not found"?
Иногда во время запуска инсталляционного сценария комплекта программ для разработки программного обеспечения происходит данная ошибка и появляется сообщение примерно следующего содержания:
Сообщения об ошибке
E: Scratchbox devkit debian-etch not found. E: Please complete scratchbox installation first. E: Specify an alternative installation path using '-s PATH' option.
Решение
Данную проблему можно решить (не забудьте поблагодарить Фрэнка Банула в списке разработчиков) так:
1) добавьте "deb http://scratchbox.org/debian/ maemo5-sdk main" в /etc/apt/sources.list 2) выполните: sudo apt-get remove scratchbox-devkit-debian sudo apt-get install scratchbox-devkit-debian sudo apt-get remove scratchbox-devkit-perl sudo apt-get install scratchbox-devkit-perl
Почему можно получить доступ к IP-адресу, а не к домену в Scratchbox?
В некоторых случаях так происходит по одной из следующих причин:
- Конфигурация сети изменилась в хост-системе после инсталляции Scratchbox
- Проблемы с конфигурацией Scratchbox:
- Инсталляция комплекта программ для разработки программного обеспечения вручную не была завершена
- Адресат был сброшен
Сообщения об ошибке Все зависит от программы, которая используется. Здесь предлагается небольшой тестовый клиент на языке Python:
import urllib2 print urllib2.urlopen("http://google.com").read()
После этого будет получено следующее сообщение об ошибке:
urllib2.URLError: <urlopen error (-3, 'Temporary failure in name resolution')>
Решение
- Fremantle X86(!), Diablo X86(!)
В многих случаях проблема, скорее всего, заключается в том, что файл resolv.conf в Scratchbox не настроен правильно. Следующие решения данной проблемы могут изменить ситуацию:
- Изменение конфигурации сети: Скопируйте resolv.conf из хост-системы в папку scratchbox/etc:
sudo cp /etc/resolv.conf /scratchbox/etc/resolv.conf
Если проблема не разрешилась, попробуйте 2.:
- Конфигурация Scratchbox: Это может быть причиной, если адресат был сброшен или инсталляция производилась вручную без использования сценария. В таком случае выполните:
SBOX> sb-conf in -edFL
Данная команда устанавливает /scratchbox/etc/resolv.conf по умолчанию и игнорирует файл в Scratchbox. Информация по данной команде представлена здесь.
Указанные действия должны решить проблему. Если этого не произойдет, можно попробовать вручную заменить записи resolv.conf внутри Scratchbox на те же самые записи resolv.conf системы хоста.
Сценарий "af-sb-init.sh start" аварийно завершается
Иногда случается так, что сценарий аварийно завершается сразу же после запуска. Проблема может заключаться в том, что старые процессы по-прежнему активные, и это приводит к ошибке. Показателем того, что все дело именно в этом, являются следующие строки после запуска:
Показатель
_X86: ~] > af-sb-init.sh start ... DBUS system bus is already running, doing nothing D-BUS session bus daemon is already running, doing nothing Starting Maemo Launcher: maemo-launcher start failed. Sapwood image server is already running, doing nothing ... aborting...
Данная ошибка показывает, что по-прежнему запущены старые процессы, что может вызывать проблемы при повторном запуске инфраструктуры.
Решение
Чтобы решить данную проблему, остановите инфраструктуру, прервите все старые процессы и запустите сценарий снова. Для этого:
- остановить инфраструктуру:
~] > af-sb-init.sh stop
- прервать старые процессы:
~] > sb-conf killall
- перезапустить:
~] > af-sb-init.sh start
Как инсталлировать SDK+ на платформу Linux AMD64?
Пакет Maemo SDK+ включает в себя Scratchbox 2 и Qt, но он будет инсталлироваться только на 32-битные платформы. При работе с Debian с 64-битным ядром пакет Maemo SDK+ можно инсталлировать в 32-битную среду с измененным корневым каталогом, которая установлена над 64-битной платформой.
Решение
Данное руководство охватывает все шаги вплоть до компиляции и тестирования.
Ошибка QEMU при выполнении cmake в архитектуре ARMEL в Fremantle
Показатель
qemu: uncaught target signal 11 (Segmentation fault) - core dumped make: *** [cmake_check_build_system] Error 126
Решение Проверьте версию cmake. Если использовать версию 2.6.3-2maemo4+0m5, это должно решить проблему.
Ошибка git при попытке клонировать/извлечь из репозиториев протокола https
Показатель
error: error setting certificate verify locations: CAfile: /usr/share/curl/curl-ca-bundle.crt CApath: none warning: remote HEAD refers to nonexistent ref, unable to checkout.
Решение
Поместите пакет CA туда, где curl сможет его найти:
~] > mkdir /usr/share/curl ~] > ln -s /scratchbox/devkits/git/share/curl/curl-ca-bundle.crt /usr/share/curl/
Обратитесь также к описанию ошибки 4953.
Портирование в Fremantle
В данном разделе будут собраны типичные ошибки, которые возникают во время попытки портировать приложения Diablo в Fremantle. Без колебаний вносите изменения в материалы на данной странице и/или дополнения.
Стандартное сообщение об ошибке
scratchbox/tools/bin/sh: line 1: /usr/sbin/dpkg-preconfigure: No such file or directory Setting up leafpad (0.8.16le-0maemo2) ... gtk-update-icon-cache: Cache file created successfully. /var/lib/dpkg/info/leafpad.postinst: line 7: maemo-select-menu-location: command not found dpkg: error processing leafpad (--configure): subprocess post-installation script returned error exit status 127
Причина
Команда maemo-select-menu-location устарела. В операционной системе Fremantle нет подменю вида "Утилиты", "Дополнительное", "Настройки" и так далее. Все инсталлированное программное обеспечение сторонних производителей по умолчанию будет представлено в Приложениях.
Решение Удалите экземпляр из послеинсталляционного сценария. В нем нет необходимости.
Отсутствует зависимость maemo-installer-utils
Причина
Пакет hildon-application-manager больше не "предусматривает" maemo-installer-utils. Команды maemo-confirm-text, maemo-application-running, maemo-list-user-packages доступны по-прежнему.
Решение
Замените зависимость на hildon-application-manager.
Отсутствует зависимость libhildonhelp0
Причина
libhildonhelp потеряна.
Решение
Удалите зависимость и вызовы API помощи.
Ограничение аплетов Home Area
В отличие от Diablo, во Fremantle данные аплеты не поддерживают ввод текста, панорамирование областей, изменение размеров и прокрутку.
Причина
Ограничения Framework.
Решение
Замените поля для ввода текста на диалоги. Для прокрутки используйте кнопки. Добавьте опции изменения размера в диалог Настройки или адаптировать пользовательский интерфейс аплета с их учетом. Более подробная информация по разработке данных аплетов предлагается в данной [[Documentation/Maemo_5_Developer_Guide/Application_Development/Writing_Desktop_Widgets|документации].
Иконки какого размера нужно использовать?
Во Fremantle спецификации размера иконок отличаются от Diablo:
Менеджер приложений
- Размер иконок: HILDON_ICON_SIZE_FINGER.
- В Gimp или Photoshop: 48x48 пикселей
Средство запуска задач
- Размер иконок: HILDON_ICON_SIZE_THUMB.
- В Gimp или Photoshop: 64x64 пикселей
При использовании иконок в Средстве запуска задач, пожалуйста, не забудьте выполнить следующую команду в файле ostinst:
gtk-update-icon-cache -f /usr/share/icons/hicolor
Текст и иконки в диалогах
Проблема
Текст в диалоговых окнах отформатирован неправильно (усечен справа), когда иконка находится на месте.
Решение
В целом не следует использовать иконки в диалогах во Fremantle. Удалите иконку и текст будет правильно отформатирован.
Сценарии инициализации
Проблема
Сценарии инициализации больше не работают.
Причина
В операционной системе Fremantle переключились на использование upstart для инициализации системы.
Решение
Создайте upstart определения задачи вместо сценариев инициализации. Информацию по их написанию можно найти на http://upstart.ubuntu.com/getting-started.html. Тем не мене, помните, для Maemo 5 используется каталог /etc/event.d.
Сценарий задачи необходимо поместить в /etc/event.d/package. Для postinst, prerm и postrm пакета следует использовать команды start --quiet и stop --quiet, чтобы запускать и останавливать сервис. К сожалению, не предусмотрен инструмент debhelper в качестве помощи.
Qt
Как найти ссылку на Maemo Qt API?
В гипертекстовой среде есть страница, посвященная Qt, где предлагается полезная информация. Также обратите внимание на официальную документацию Qt для Maemo.
Как создать " HildonStackableWindows"?
Для этого нужно создать QMainWindow и еще одно QMainWindow в качестве порождающей записи в конструкторе.
Пример
// created by hopbeat QApplication app(argc, argv); QMainWindow* window=new QMainWindow(); window->setCentralWidget(someWidget); window->show(); QMainWindow* window2=new QMainWindow(window); window2->show();
Автоматическая программа-компоновщик
Локализация не работает
Возможно, используется следующая строка в configure.ac:
localedir=`$PKG_CONFIG osso-af-settings --variable=localedir`
Это означает, что необходимо добавить osso-af-settings в Build-Depends.
Пакет отклоняется: ОТКЛОНЕНО: точно такая же версия или более новая версия уже находится в репозитории Extras-devel
В репозиторий нельзя загрузить одну и ту же версию дважды. Если что-то изменено в пакете, необходимо увеличить номер его версии или редакции пакета.
Полная сборка программы завершилась неудачно: указанный файл или каталог отсутствуют в регистрационном журнале
Возможно, поле Build-Depends в debian/control не задано правильно. Автоматическая программа-компоновщик начинает каждую полную сборку программы с чистого образа SDK. Если во время building требуется какое-то приложение, которое не предлагается в образе SDK по умолчанию, необходимо специально его задать.
Чтобы убедиться, что поле Build-Depends в debian/control заполнено, выполните
dpkg-depcheck -m dpkg-buildpackage -rfakeroot -b
в дереве исходных кодов. (Чтобы все заработало, потребуется команда fakeroot apt-get install devscripts
).
Полная сборка программы завершилась неудачно, все работает только в отдельном Scratchbox
Ответ предлагается выше.
Репозиторий Extras
Как пакетировать программное обеспечение для Maemo?
Главная статья: Документация/Руководство для разработчиков Maemo 5/Пакетирование, развертывание и распределение
Так как в основе Maemo лежит операционная система Debian, при создании пакетов для Maemo заимствуются многие инструменты и методики Debian. Тем не менее, есть некоторые отличия со стороны Maemo.
Предлагается простое руководство для начала работы.
Как получить права на загрузку в репозиторий Extras?
Приглашение можно получить через Помощника в репозитории Extras.
Как активировать репозитории Extras, Extras-testing и Extras-devel в Scratchbox?
Добавьте следующие строки в /etc/apt/sources.list из Scratchbox:
deb http://repository.maemo.org/extras/ fremantle free non-free deb-src http://repository.maemo.org/extras/ fremantle free deb http://repository.maemo.org/extras-testing/ fremantle free non-free deb-src http://repository.maemo.org/extras-testing/ fremantle free deb http://repository.maemo.org/extras-devel/ fremantle free non-free deb-src http://repository.maemo.org/extras-devel/ fremantle free
После этого выполните следующие команды из Scratchbox:
cd /tmp wget http://repository.maemo.org/extras-devel/dists/fremantle/fremantle-extras-pubkey.asc apt-key add fremantle-extras-pubkey.asc apt-get update apt-get update
Да, иногда требуется выполнить обновление apt-get дважды.
Если сообщается, что apt не может найти keyring, предложенные выше команды должны все исправить.