Часто задаваемые разработчиками вопросы

Материал из FRUCT Maemo wiki (Russian)
Перейти к: навигация, поиск

Часто задаваемые разработчиками вопросы

Данная статья представляет собой список часто задаваемых вопросов, которые имеют отношение к разработке приложений для платформы 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?

В некоторых случаях так происходит по одной из следующих причин:

  1. Конфигурация сети изменилась в хост-системе после инсталляции Scratchbox
  2. Проблемы с конфигурацией 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 не настроен правильно. Следующие решения данной проблемы могут изменить ситуацию:

  1. Изменение конфигурации сети: Скопируйте resolv.conf из хост-системы в папку scratchbox/etc:
sudo cp /etc/resolv.conf /scratchbox/etc/resolv.conf

Если проблема не разрешилась, попробуйте 2.:

  1. Конфигурация 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. Без колебаний вносите изменения в материалы на данной странице и/или дополнения.

maemo-select-menu-location: команда не найдена

Стандартное сообщение об ошибке

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 данные аплеты не поддерживают ввод текста, панорамирование областей, изменение размеров и прокрутку.

Причина

Ограничения инфраструктуры.

Решение

Замените поля для ввода текста на диалоги. Для прокрутки используйте кнопки. Добавьте опции изменения размера в диалог Настройки или адаптируйте пользовательский интерфейс аплета, принимая их во внимание. Более подробная информация по разработке данных аплетов предлагается в [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. Если во время сборки требуется какое-то приложение, которое не предлагается в образе 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, предложенные выше команды должны все исправить.

Личные инструменты
Пространства имён
Варианты
Действия
Навигация
Инструменты