Motto

В тихом саду здравомыслия
Пусть на вас постоянно падают
кокосовые орехи пробужденности.
Чогьям Трунгпа РИНПОЧЕ


Версия для мобильного


воскресенье, 29 декабря 2013 г.

Delphi XE5: впечатления от разработки под Android

Отправил свою программу на конкурс. Саму программу показывать пока не хочу. А хочу поделиться своими впечатлениями от использования Delphi XE5 и Firemonkey.

 

Сразу оговорюсь

  • Это мой первый проект на Firemonkey и первый опыт разработки для Android.
  • Я использовал Delphi XE5 + Update 1 + все хотфиксы для Update 1.
  • Тестировал только на телефоне GSmart Aku A1 (480 x 854 pixels, 4.5 inches (~218 ppi). Эмуляторы не использовал.
  • Часто компилировал и запускал на Win32 в режиме Mobile Preview (об этом ниже).
  • В этом проекте решил опробовать подход "как-мне-кажется-это-делают-в-java", когда и для каждого класса создавал отдельный .pas файл. В результате получилась куча юнитов и чтобы в них не запутаться пришлось раскидать их по папкам и пространствам имён. Получилось в принципе удобно. Хотя есть у меня подозрение, что сборка проекта под Android из-за этого работал медленнее, чем в случае, если бы весь код был запихан в один .pas файл.

Грабли

Deployment manager и папки

Deployment manager и папки. С этим тоже пришлось повозиться прежде чем удалось понять какие надо указывать пути в Deployment manager и как потом найти эти файлы в программе. Пришлось провести небольшое исследование. О нём напишу позже, в отдельном посте. Вот только так и не понял, как же из приложения определить путь до корня SdCard. Также не понравился UI в Deployment manager-e. Редактирование пары десятков файлов сделано не очень удобно, хотя к слову сказать просто добавить пачку файлов довольно легко.

Сразу уточню, что я хотел недокументированного. Искал легкий способ добавления/редактирования файлов в Deployment manager из консоли. Не получилось, так файлы добавленные через Deployment manager поначалу сохраняются в .dproj файле, хотя в папке проекта и присутствует отдельный файл .deployproj. И я так и не понял в какой момент файлы переносятся из .dproj в .deployproj файл. Вот кстати наткнулся на пост о похожем исследовании от Павла Алхимова “DeployFolder - Развёртывание мобильного подкаталога”.


Читать дальше..

понедельник, 16 декабря 2013 г.

Delphi. Как указать папку "по умолчанию" для новых проектов

Надоело мне, что Delphi предлагает каждый новый проект сохранить в папке My documents. И задался я вопросом, а как бы эту папку изменить. Оказалось – очень просто. Настолько просто, что даже и рассказывать тут не о чем. Но я всё-таки расскажу так как я (почему-то) долгое время считал, что такой опции просто нет.

Главное меню –> Tools –> Options –> Environment Options –> Default Project

Или, с помощью IDE insight: Ctrl+. ввести default project + Enter

image

В Delphi XE-XE5 эти настройки хранятся в реестре:

HKEY_CURRENT_USER\Software\Embarcadero\BDS\12.0\Globals\DefaultProjectsDirectory

Тип данных: REG_SZ


Читать дальше..

пятница, 13 декабря 2013 г.

2. Пишем детскую программку под Android: основа

Продолжаем писать программку для детей под Android (требования мы сформулировали в первом посте).

Начнём с того, что сделаем совсем простой проект – программку, которая умеет листать картинки при нажатии на кнопку. Картинки запакуем в ресурсы программы.

Создаём новый проект: Firemonkey Mobile application –> Blank application

Разрешения

Отключим ненужные permissions. Так как по умолчанию включено слишком много всего.

Project –> Options –> Uses permissions. (Или через Help Insight: Ctrl+. –> ввести Permission + Enter, но это как-то странно работает). Сверху выберем All configurations Android Platform, так как список Permissions доступен только для Android платформы.

image


Читать дальше..

суббота, 23 ноября 2013 г.

Добавление ресурсов в программу

В этой публикации я побуду Капитаном Очевидность и расскажу о паре способах добавления ресурсов в программу.

Определение: Ресурсы — данные, встроенные в EXE, DLL, CPL и (начиная с Windows Vista) MUI-файлы. Доступ к этим данным можно получить через функции Windows API. (из Википедии).

В Delphi XE5 аналогичный механизм используется и для хранения ресурсов в Android приложениях. Насчёт iOS приложений я не проверял, но полагаю, что должно работать и там.

Вообще, ресурсы в Delphi – это фундамент, на котором строится вся программа. Именно в ресурсы пакуются все ваши DFM файлы (видели же строку “{$R *.DFM}” в .pas файлах форм? это оно самое), иконки, курсоры, и строки (resourcestring). Именно благодаря ресурсам работает локализация программ с помощью Translation Manager. Всё это происходит автоматически.

Также, именно ресурсы рекомендуется использовать для встраивания в программу дополнительных файлов - картинок, аудиофайлов, текстов.

Для чтения ресурсов можно использовать класс TResourceStream. А о том, как добавить ресурсы в программу, мы и поговорим.

Начиная с Delphi 2009 в IDE появился диалог, позволяющий добавить ресурсы в проект.

Диалог Resources в Delphi XE5

Этот диалог даёт возможность включить в проект сразу несколько файлов (проверял в XE5).

При сборке проекта, эти файлы компилируются в .res файл. А при линковке (компоновке), встраиваются в программу.

 

Но как же программисты жили раньше? Как добавляли в программы картинки, звуки и большие текстовые файлы?


Читать дальше..

суббота, 26 октября 2013 г.

1. Пишем детскую программку под Android: план

Delphi для Android. О сколько радостных предвкушений вызывает у меня сочетание этих слов. Я давно хотел сделать что-нибудь под Android. Для начала что-нибудь простенькое, но свое.

Дочке сейчас полтора года, и ей очень нравятся телефоны, компьютеры и планшеты. Любая чёрненькая коробочка с кнопочками и лампочками влечёт её почище магнита. Но особое предпочтение доча отдаёт устройствам с тачскрином. “Папа, дай мне пожалуйста свой телефон, я хочу с ним поиграть, а заодно я раскидаю твои иконки так, что не сможешь потом ничего найти, поменяю звонок, переставлю время, запущу тебе кучу разных программ и позвоню парочке случайных знакомых”, хочет она сказать, но произносит только “Алё-алё! На-на-на!”. Ключевое для дочки, конечно, поиграть. Больше всего она любит программки с картинками, которые издают звуки.

Её требования к играм очень простые:

Там обязательно должна быть коровка которая говорит му-му, собачка которая говорит гав-гав, кошечка говорящая мяу-мяу, уточка с кря-кря и поезд, который говорит туу-туу.

У меня требований чуть больше:

  • там не должно быть змей, говорящих ссссс, страшно рычащих тигров, обезьянок, и других тварей, которые не водятся в нашей местности и в детских книжках
  • программка должна быть проста в использовании:
    • картинки должны быть большими
    • программа должна чётко понимать, что прикосновение к экрану на 3 сантиметров в стороне от картинки это на самом деле прикосновение к картинке
    • а если на экран нажали ладошкой, то не это никакой не мультитач, а обычное нажатие, и если на экране есть несколько животных издающих звуки, то совершенно излишне заставлять всех животных вопить благим матом, а то родители пугаются
    • крайне желательно, чтобы программка умела блокировать нажатия кнопок home, back и menu (в некоторых детских программах это кстати реализовано). (сенсорные кнопки на телефонах/планшетах – это зло)
  • Никакой рекламы во время игры, разумеется

Таких программ очень много в Google Play Market-e. Но у всех у них есть какой-нибудь фатальный недостаток.

<
Читать дальше..

воскресенье, 20 октября 2013 г.

Легкий способ проверить Android устройство на совместимость с Delphi XE5.

Как узнать будет ли работать программа сделанная в Delphi XE5 на Android устройстве.

Начну сразу с простейшего способа. Официальная спецификация – ниже.

All-the-Myriad-Androids-Animoca

Неофициальные способы

Легкий способ проверить своё устройство

  1. Надо установить на телефон маленькую программку SysCheck от Christopher Moeller (не требует никаких прав).
  2. Запустить.
  3. И посмотреть на первые 3 строчки отчёта.

Там будет указана версия ARM (нужна v7), версия OS (2.3.3-2.3.7 и 4.0.3-4.3)  и указано поддерживается ли NEON (должно быть yes).

Источник

Список из 118 проверенных устройств

Jim McKeeth опубликовал список из 118 протестированных устройств (зеркало, html версия). Список получен с помощью сервиса Apkudo. Этот сервис позволяет загрузить свой APK, и проверить его работу на большом количестве разных устройств.

Для проверки Jim использовал простейшую программку типа Hello World.

Из 118 устройств APK установился только на 108 (на остальных был либо тайм-аут либо не хватило свободного места). Из 108 устройств, программка не запустилась только на 3.

  • Проверено устройств: 118
  • Не установилось на: 10
  • Зависло (Application not responding) на: 3
  • Успешно запустилось на: 105
  • Процент успеха: 89%

Источник

Официальные способы

Соответствие спецификации

Поддерживаются устройства архитектуры ARMv7 и ОС:

Название ОС Android

Версия ОС Android

API Levels

Jelly Bean

Android 4.1.x, 4.2.x, 4.3.x

API Levels 16, 17, 18

Ice Cream Sandwich

Android 4.0.3 and 4.0.4

API Level 15

Gingerbread

Android 2.3.3 - 2.3.7

API Level 10

Не поддерживается:

  • Honeycomb (Android 3.x)
  • Эмулятор Gingerbread
  • Устройства на процессоре Tegra 2 (поддержка NEON обязательна)

Ссылка на официальную документацию.

Список проверенных устройств от Embarcadero

Список можно найти в официальной документации от Эмбаркадэро.

Сюда копировать не буду. Если интересно – сходите по ссылке.

http://docwiki.embarcadero.com/RADStudio/XE5/en/Android_Devices_Supported_for_Application_Development#Results_of_Our_Android_Device_Testing

p.s. Забавно, но в Google Play уже появились и платные программки для проверки устройств на совместимость с Delphi ХЕ5. Стервятники, такие стервятники.


Читать дальше..

пятница, 11 октября 2013 г.

Ссылка: Почему веб-приложения на мобильных платформах работают медленно

 

Delphi XE5 дает возможность создавать нативные приложения и для десктопа и мобильных платформ (пока что Android и iOs). Единый код, UI, все дела.

Но зачем мне для этого покупать Delphi, воскликнет искушенный читатель? Я возьму какой-нибудь бесплатный мобильный Javascript фреймворк (Cordova, PhoneGap и другие) и сделаю то же самое. Не спеши, читатель, отвечу ему я. Ведь Javascript может оказаться слиииииишком медленным.

И вот одна статья на эту тему. Только сегодня! Только на нашей арене! Javascript против нативного кода! Сравнение производительности и предсказании будущего! Статья опубликована на Хабре 8 августа 2013.

Почему веб-приложения на мобильных платформах работают медленно

 

Статья по ссылке реально большая. И я позволю себе скопировать сюда выводы.

Вот что следует помнить:
* в 2013 году JavaScript является слишком медленным, чтобы его можно было использовать на мобильных устройствах для создания приложений типа обработки фотографий и пр.:
— он в 5 раз медленнее нативного кода;
— он сравним с IE8;
— он медленнее, чем x86 C/C++, примерно в 50 раз;
— он медленнее, чем серверные Java/Ruby/Python/C# примерно в 10 раз, если программа выделяет не больше 35 Мб памяти и резко замедляется при дальнейшем выделении памяти;
* Наиболее реальный способ его разогнать — это увеличить производительность процессора до уровня десктопа. Возможно это и произойдет, но не в ближайшем будущем;
* Сам язык последнее время нисколько не ускорился и его разработчики утверждают, что при сохранении языка и API, производительность никогда не догонит нативный код;
* Сборщик мусора сильно тормозит при ограниченном количестве доступной памяти. Он ведет себя сильно хуже, чем на декстопах или серверах;
* Каждый мобильный разработчик, независимо от того — использует он сборку мусора или нет — тщательно продумывает работу с памятью;
* JavaScript в настоящий момент фундаментально против того, чтобы даже попробовать оценить расход памяти на мобильных устройствах;
* Даже если они захотят дать эту возможность, опыт подсказывает, что сделать это будет очень трудно;
* Есть надежда на asm.js, но он, скорее, напоминает C\C++, чем что-то динамическое типа JS.


Читать дальше..

четверг, 3 октября 2013 г.

Delphi XE5 с поддержкой Андроида. Первые впечатления.

Delphi XE5 art

Не то, чтобы я очень ждал выхода Delphi XE5. Поначалу. На самом деле я даже не следил за новостями. Но за пару недель до релиза (как это выяснилось позднее) ситуация поменялась. Только-только стали появляться первые обзоры от бета тестеров XE5. А я решил проверить будет ли мой Lazy Delphi Builder работать с компиляторами от XE5.

Зарегистрировался на участие в бета тесте, стал следить за новостями и как-то потихоньку втянулся в активное ожидание, с ежедневной проверкой DelphiFeeds на тему новостей. Я как-то даже не верил, что у Embarcadero получится. Уж очень амбициозная цель была поставлена. Но у них получилось. Молодцы!

Доступа к бете я тогда так и не дождался – через неделю вышла полная версия.

Попытка первая.

Очень интересно, заработает ли у меня. Будет ли всё действительно просто – или придётся сначала потанцевать с бубном.

Trial установлен. В наличии имеется пара часов свободного времени и старенький Samsung Galaxy Mini, который как выяснилось позже, просто не поддерживается.

Времени читать документацию нет. Пара часов пролетает в лихорадочной доустановке Android SDK, NDK, настройке IDE и попытках запустить какую-нибудь демку на телефоне (Oppa-Delphi-Style!). Сначала получил ошибку о несовпадающей версии API. Потом выяснилось, что в телефоне не хватает места. Пара часов пролетела как пара минут оставив за собой дымный след несбывшихся надежд.

Попытка вторая.

Ко второй попытке я подошел основательнее. Скачал и установил наисвежаиший Android SDK. Взял другой телефонный аппарат, которые точно поддерживается Delphi XE5. На этот раз экспериментировал с Gigabyte GSmart Aku A1. Телефон тоже бюджетный но вышедший в августе 2013.

И засел за эксперименты.

В этот раз всё прошло как по маслу. Единственная проблемка с которой пришлось столкнуться связана с телефоном. Поиск USB драйвера для телефона превратился в квест. Windows 7 его сам не нашёл, стандартный USB драйвер из ASDK тоже не покатил. Нашёлся же драйвер "в самом неожиданном месте" - на сайте производителя (но тоже не сразу - спасибо форуму 4pda за наводку на правильный линк).

p.s. Собирал и устанавливал в телефон из IDE. Теперь интересно, можно ли это сделать из командной строки. (Lazy Delphi Builder тут бессилен, так как умеет только компилировать)


Читать дальше..

воскресенье, 15 сентября 2013 г.

Lazy Delphi Builder 1.9.7.251. 15-сен-2013 для XE5 и XE6

Для тех, кто не в курсе: Lazy Delphi Builder даёт возможность пересобрать всё что надо используя только .pas файлы. И поддерживать порядок, складывая все dcu-шки в одно определённое место. Лицензия - халява.

Сценарии использования:

  1. Пересобрать все свои компоненты/библиотеки из исходников с нуля (актуально в случае апгрейда, чистки)
  2. Сборка нового релиза (всё собирается с нуля из pas-файлов)
  3. Установка новых больших библиотек чтобы поиграться (или пересборка старых с новыми директивами)

История изменений

  1. Новое: теперь можно выбирать платформу для компиляции. Пока поддерживаются Win32, Win64 и OSX. Это сделано через замену вызова dcc32 на вызов dcc64 или dccOSX. Для использования других платформ, можно указывать нужный dcc вручную (см. пункт 9 в release notes к версии 1.8.6.240)
    Как выбрать компилятор для Win64 и OSX
  2. Новое: теперь можно изменять число ошибок, после которого Lazy Builder останавливает билд (по-умолчанию 2, как и в предыдущих версиях)
    Параметры сборки
  3. Исправлено: Access Violation при нажатии кнопки "Load preset", который возникал при пустом списке (спасибо за отчёты об ошибках)
  4. Исправлено: в выходных папках нельзя было использовать Unicode-ные (не-ansi) символы. Реализовано так: преобразование в OEM теперь выполняется только для Delphi версий младше чем D2009 (я не нашёл точной информации о том, начиная с каких версий Delphi и Windows, корректно поддерживается Юникод в командной строке, если что-то не будет работать - пишите).
  5. Исправлено: Удаление package из IDE не работало для Delphi версий младше чем XE2.
  6. Исправлено: Дерево с файлами: зависание при попытке посмотреть детальную инфу о проблменом (erroneous) пакете или проекте.
  7. Исправлено (надеюсь): иногда невозможно изменить выбранную версию Delphi после компиляции
  8. Minor: исправлены подсказки на закладке "Scan settings"
  9. Minor: во всех текстах dcc32 был переименован в dccXX
  10. Добавлена поддержка Delphi XE6 =)

Скачать можно отсюда.

Ссылки по теме


Читать дальше..

воскресенье, 28 апреля 2013 г.

Lazy Delphi Builder 1.8.6.240 от 28-04-2013 для Delphi XE4 и XE5

Что нового (вкратце):

  • Поддержка Delphi XE4. И на всякий случай, сразу и Delphi XE5, - вдруг выйдет через месяц =)
  • Профили (мини). Теперь можно сохранять профили групп настроек для дальнейшего использования. Сделано для: выходных папок, настроек билда, переменных окружения и других мелочей (см. ниже).
  • Изменён формат хранения списков в файлах LazyDBP и ini. Теперь без цифр – а это значит, что сравнить два файла в Diff-viewer-е станет совсем просто. И кстати, теперь все настройки будут сохраняться в подкаталоге Data. Новый формат профилей не имеет обратной совместимости со старым. Но возможность сохранить в старом формате осталась в Save As диалоге.
  • Поддержка нескольких выражений в фильтре дерева (через точку с запятой “;”)
  • Появилась возможность вместо dcc32.exe подставлять свой файл. Это может быть .bat-ник, может быть .exe. А может быть и dcc64.exe (см. пункт 9 в истории изменений)
  • Добавлено автоопределение версии Delphi по названию файла пакета (см. Check Wizard)
  • Появился редактор для compiler defines в виде CheckListBox-а
  • Много мелких улучшений и исправлений (подробный список под катом, и в архиве с программой).

Скачивать на домашней странице: http://www.lazyproject.info/downloads/ или здесь


Читать дальше..

пятница, 29 марта 2013 г.

Головокружительные возможности DI и Delphi Spring. Часть 9. Один интерфейс – несколько реализаций.

Это последний перевод из серии про внедрение зависимостей на примере использования Delphi Spring.
Это перевод публикации Ника Ходжеса от 07 ноября 2011 года: Getting Giddy with Dependency Injection and Delphi Spring #9 – One Interface, Many Implementations. (перевод сделан с разрешения автора).

Все переводы по Spring


Как обычно, Delphi Spring Framework можно скачать с GoogleCode
До сих пор мы регистрировали интерфейсы и их реализации в соотношении один к одному. Для каждого интерфейса регистрировался только один реализующий класс. Но что, если мы хотим реализовать интерфейс разными способами, выбирая реализацию в зависимости от выбора пользователя или других внешних факторов?
К счастью для нас, контейнер Spring предоставляет такую возможность. Система регистрации контейнера в фреймворке Delphi Spring позволяет при каждой регистрации указать имя предоставляемой реализации, давая таким образом возможность отличать одну регистрацию от другой, даже если они регистрируют разные реализации для одного и того же интерфейса.
При регистрации нескольких реализаций одного интерфейса без указания имени «победит последний».

Читать дальше..

понедельник, 11 марта 2013 г.

Лучшее в Delphi блогах за 2012 год

Все лучшие публикации по Delphi за 2012 год в одном месте. Радует, что качество публикаций растёт с каждым годом. 

Рад видеть среди новых авторов Александра Багеля (Rouse_), чьи советы и наработки опубликованные на форумах не раз мне помогали. Также, рад видеть новых авторов из Embarcadero (и особенно Сергея Рощина).

Отдельно рекомендую обратить внимание на:

  • Перевод справочной системы Delphi (тем, кто не читает на английском)
  • Серию постов Александра Багеля (изучаем отладчик)
  • Разделы Инструменты и компоненты
  • Статью “Разработка через тестирование”
  • Материалы по Delphi Spring
  • Все публикации и переводы Александра Алексеева


Подборки ссылок за предыдущие годы:


Читать дальше..

Постоянные читатели