Блог Александра Божко
Архивы
Рубрики

Android

Некоторое время назад я писал о своих экспериментах с DataSnap. Сейчас, в рамках всё того же проекта, у меня появилась  несколько модифицированная задача, где использование данной технологии будет более чем уместно. Вкратце опишу задачу.

Итак, имеется настольное приложение, работающее с БД MS Access (это не мой выбор и мы условились не обсуждать его здесь). Функционал приложения довольно обширный, но некоторая его часть связана с учетом рабочего времени. На ПК запускается таймер, по окончанию его работы в БД заносятся данные об отработанном времени, выполняемом проекте и т.д. Идея заключается в том, что бы этот таймер можно было запускать на мобильном устройстве, а информация с него попадала в базу на ПК.

Задачу я реализую с помощью FireDAC. И поскольку обилия русскоязычных руководств по данной теме не наблюдается, я решил в блоге описать всю процедуру пошагово. Естественно, в несколько упрощенном виде.

Создание сервера

Создаем новый проект.

  • Выбираем  File > New > Other из главного меню;
  • В ветке DataSnap Server выбираем DataSnap REST Application;

DataSnap00

Читать далее

Прежде всего хочу поздравить всех читателей блога с прошедшими праздниками и пожелать всего наилучшего в наступившем году.

В силу понятных обстоятельств я не стал делать традиционный новогодний отчет, как и строить какие-либо планы на год. Тем не менее, жизнь не стоит на месте, работа работается, и определенные события в мире Delphi происходят. Подборку пропущенных “новостей из мира Delphi” за время рождественских каникул обязуюсь опубликовать в ближайшее время. А пока расскажу о новом аппарате, который я приобрел.

Sony Xperia™ M2

С характеристиками вы можете ознакомиться на официальном сайте. А субъективное впечатление весьма приятное. Обращает на себя внимание тот факт, что аппарат буквально напичкан фирменным софтом от производителя. Да и от продавцов достался в подарок внушительный комплект софта. В работе смартфон достаточно шустр и вполне оправдывает свою стоимость (примерно $200). К слову, свой предыдущий телефон GSmart 1362 я покупал примерно за те же деньги 2 года назад. Но, как вы, наверняка, догадались, основной интерес для меня заключался в том, как будут работать FireMonkey приложения.

Разработку я веду в XE7 на HP Envy 23 d254er с предустановленной Windows 8.1. Последнее обстоятельство, конечно же создает проблемы при установке драйвера. В очередной раз выручил пост и видеоролик Jim’а McKeeth.

Читать далее

В прошлой части мы практически полностью реализовали логику приложения. Сейчас я хочу рассказать о, возможно, самой интересной части разработки приложения. Построении пользовательского интерфейса. Если вы еще не в курсе, что такое FireUI, то, вероятно удивитесь, что большая часть работы по построению и отладке GUI Android приложения будет производится в Windows, без использования мобильного устройства. Субъективно, я в восторге. Это быстро, удобно и во всех отношениях легко.

Приступим…

Итак, у нас есть чистая (в смысле используемых стилей) форма, с четырьмя кнопками и меткой TLabel. Конечно у меня, изначально было  искушение бросить на форму TStyleBook, а метку отобразить каким-нибудь диковинным шрифтом. Посмотрев на приложение Владимира Тимофеева я отказался от этой идеи. Подобную красоту придется рисовать руками. Или немного схитрить, используя возможности библиотеки классов FireMonkey. Я выбрал второй вариант. Немного погуглив по слову Scoreboard, я нашел на коммерческом стоке графических изображений симпатичный алфавит, дополненный цифрами.

Digital alphabetic

Так выглядит выбранный мною клипарт. Вооружившись чувствительной мышкой и терпением я вырезал из него цифры. Читать далее

Наверное свой таймер не писал только ленивый. А в контексте поддержки разработки для мобильных платформ, задачу  написания таймера на Delphi вообще можно считать культовой. Вот я и подумал, почему бы в качестве примера разработки FireMonkey приложения не разобрать именно таймер. Под Android, естественно. Конечно же, это будет именно мой взгляд на задачу, которая, хотя и не особо сложная, все же имеет свои нюансы. Возможно, у вас возникнут какие-то замечания, или предложения, было бы замечательно обсудить их в комментариях. Я отнюдь не эксперт в области написания мобильных приложений, поэтому любой ваше замечание будет для меня ценно.

Разрабатывать мы будем именно таймер, в англоязычном понимании этого термина. Т. е. на экране будет отображаться циферблат и четыре кнопки – “Пуск”, “Пауза”, “Стоп” и “Отмена”. Отсчет будет производиться в прямом направлении (т. е. время будет увеличиваться). Вариант, при котором задается время и идет обратный отсчет в англоязычной терминологии называется Stop Watch, возможно я попробую реализовать его позже.  То, приложение, которым займемся мы, по функциональности ближе к секундомеру.

Delphi XE7, позволяет значительно упростить процесс разработки, за счет того, что теперь мы можем создать и отладить реальное приложение для Win32, а затем просто добавить представления форм для необходимых мобильных устройств и, немного подкорректировав их, получить рабочее мобильное приложение. Звучит слишком красиво, что бы быть правдой? Возможно. Но проверить данное утверждение я и хочу, реализовав поставленную задачу. Читать далее

В книжном магазине Books.Ru в очередной раз объявлена акция. Более тысячи книг продаются по принципу “заплати сколько хочешь”. Список “попавших под раздачу” книг значительно расширился. Появились и книги по Delphi, iOS и Android.

Ниже привожу “список избранного”, т. е. те книги, которые потенциально могут заинтересовать читателей блога.

Как и предполагалось, последние пару недель я плотно занимался разработкой мобильного приложения под Android. И, думаю, это хороший повод продолжить начатый обзор беглым рассказом об изменениях в FireMonkey.

Обнаружение неподдерживаемых устройств

Вы наверняка знаете, что платформа поддерживает подавляющее большинство Android устройств. Но есть и устройства с архитектурой, не поддерживаемой FireMonkey. В частности таких:

  • ARMv6
  • Intel x86
  • MIPS

Естественно, мой шеф является счастливым обладателем одного из подобных аппаратов. После запуска приложения, собранного в XE5 на Motorola Atrix mb860 попросту появляется черный экран, без всяких дополнительных оповещений. В XE6 появились три небольших библиотеки, которые по умолчанию добавляются в проект. Благодаря им теперь, при попытке запустить приложение на неподдерживаемом устройстве теперь выводится сообщение

Application not supported by this device

Если нет необходимости использовать эти библиотеки (например, когда приложения будет запускаться на каком-то конкретном устройстве) их можно отключить в Deployment manager‘е.

delpoyment_manager

Однако, в том случае, если приложение будет распространяться в GooglePlay, эти библиотеки точно следует отключить, поскольку данный сервис сам определяет совместимость приложения с устройствами.

Компоненты для продажи цифрового контента и показа рекламы

В отличии от iOS приложений, монетизация Android приложений не всегда возможна путем продажи непосредственно приложения. Здесь и сами приложения дешевле и конкуренция выше. Поэтому для Android приложений часто используют схемы продажи цифрового контента или рекламы в приложениях.

В XE6 теперь появились компоненты TBannerAdd и TInAppPurchase, предназначенные для показа рекламы и продажи цифрового контента, соответственно. Компоненты можно использовать как в Android (для работы с GooglePlay и AdMob), так и в iOS приложениях (для работы с iTunes и iAd).

Новый FireMonkey стиль для Google Glass

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

FMX.Grid

Изменения произошли в гриде. Вопрос этот довольно актуальный. Все-таки велико искушение перенести идеологию VCL приложений в FireMonkey. И если для мобильных приложений от использования грида  лучше отказаться, то для десктопных приложений он просто необходим. Качественных сторонних решений уровня гридов от DevExpress нет. А для серьезных приложений, работающих с данными нужна сетка отображения данных с серьезным функционалом.

В XE6 был расширен базовый класс TCustomGrid. В нем появились события OnDrawColumnCell и OnDrawColumnHeader и несколько новых свойств TCustomGrid.Options.

В новой версии TGrid появились обновленные редакторы для столбцов типа TTimeColumn и TDateColumn. А также были добавлены четыре новых события OnHeaderClick, OnSelectCell, OnColumnMoved и OnCreateCustomEditor.

Кроме того, был произведен рефакторинг, улучшена производительность, в частности изменен механизм прокрутки.

Конечно, это в определенной мере расширяет функциональные возможности грида. Но если вас интересует мое субъективное мнение, то грид, это лишь часть вопроса. Кроме него узким местом в разработке приложений для работы с данными является и механизм Live Bindings.

 Новые контролы для отображения даты и времени

Вместо TCalendarEdit в XE6 появились TDateEdit и TTimeEdit. Сразу же “прикрутил” их в свое приложение. Реализация понравилась. Реагируют на разрешение устройства и в зависимости от него показывают календарь в развернутом либо урезанном виде.

FireMonkey DateEdit

FireMonkey DateEdit

Прочее

На самом деле небольших изменений в FireMonkey было сделано достаточно много. В основном они связаны с модификацией типов данных и добавлением новых методов и событий в некоторые классы (в частности обновился TWebBrowser).

Между тем, при переходе с XE5 особых проблем с совместимостью у меня не возникло. Я не буду здесь перечислять все изменения, они детально описаны в справке в разделе What’s New in Delphi and C++Builder XE6.

Отдельная тема, на мой взгляд, достойная обсуждения – FireDAC. Но об обновлениях в этой библиотеке доступа к данным мы поговорим не сегодня.

Субъективные впечатления

Безусловно сама среда при разработке мобильных приложений стала работать стабильнее. За пару недель плотной работы практически не было “вылетов” и “критических сбоев” в работе IDE. Дизайнер формы наконец-то стал работать с буфером обмена.

К сожалению, редактор Visual Binding при большом количестве объектов на форме по-прежнему притормаживает, поэтому “лишние” (не используемые) объекты лучше сразу делать невидимыми.

Но, повторюсь, что в целом, впечатление весьма благоприятное.

Не пропустите:

 

Маленькое дополнение к предыдущему посту.

Когда вы разворачиваете базу данных SQLite, наблюдается интересная вещь. Если использовать в качестве Deployment Path “.\assets”, то под эмулятором приложение не развернется и “вылетит” при старте. Тем не менее, на реальном устройстве все работает без проблем.

С чем это связано я не знаю. Использование .\assets\internal решает проблему. Из приложения этот путь можно получить путем вызова метода TPath.GetDocumentsPath.

Подробнее о развертывании БД вы можете прочесть в блоге компании DevArt.

 

Для чего это нужно?

Речь идет не о компиляции приложения из IDE в эмуляторе, а именно о запуске собранного приложения. Эту возможность могут использовать тестировщики и прочие “заинтересованные персоны”. При этом  никакие платные инструменты не используются. Все что нужно для того, что бы посмотреть на Windows (или Mac OS) машине как работает ваше приложение, находится в свободном доступе.

Что нужно для работы?

Главным инструментом, который необходим для работы является Android SDK. Android SDK предоставляет API библиотеки и средства разработки, необходимые для создания, тестирования и отладки Android приложений. Скачать SDK можно на официальном сайте. Размер 510 М.

Кроме этого, приложения придется запускать с параметрами. Проводник Windows сам по себе является далеко не лучшей оболочкой. Для работы же с параметрами приложений он не предназначен принципиально. Что бы не мучатся с cmd я рекомендую использовать “олдскульный” менеджер файлов (например FAR Manager или Total Commader).

Настройка эмулятора

После скачивания Android SDK вам необходимо распаковать архив и запустить SDK Manager.exe. С помощью менеджера вы сможете настроить установленные компоненты SDK. Для работы эмулятора вам понадобится как минимум Android SDK Tools, Android SDK Platform-tools и SDK Platform для соответствующей версии API.

SDKManager

После того, как вы убедитесь, что необходимые компоненты установлены запустите на выполнение файл android.bat с параметром avd из каталога <SDK Path>\sdk\tools. Таким образом будет запущен Android Virtual Device Manager. Читать далее

Некоторое время назад я уже писал о DataSnap и своих экспериментах связанных с этой технологией. Интересно, что тогда я немного затронул набор компонентов доступа к БД AnyDAC. Сейчас, похоже, появилась необходимость более плотно обратиться к данной теме, а в базовом арсенале Delphi разработчиков появился FireDAC. Вкратце обрисую задачу.

Имеется некоторое Windows приложение, работающее с СУБД MS Access (опционально с MS SQL). Необходимо создать для данного приложения клиентскую часть, работающую под Android и частично реализующую функционал основного приложения. При этом данные должны храниться автономно, но по запросу пользователя синхронизироваться. Здесь сразу оговорю два момента. Во-первых задача абсолютно реальная и решать ее мне так или иначе придется. Во-вторых, сама по себе задача, без учета специфики конкретных СУБД, довольно типичная, в той или иной интерпретации, встречающаяся часто. Поэтому, допускаю, что подробное  описание подобного примера будет интересно читателям.

Здесь можно выделить три условные функциональные задачи:

  • обеспечение доступа к базам данных (внутренней, для автономной работы мобильного приложения и внешней, с которой работает основное приложение);
  • обеспечение репликации данных;
  • непосредственно, функциональная часть мобильного приложения.

Естественно, что локально на Android устройстве данные целесообразно хранить в SQLite базе. Более интересен вопрос синхронизации разных баз. Если бы базовое приложение использовало в качестве СУБД Inrebase, Oracle  или MySQL, то можно было бы подключиться к базе напрямую. При этом, в первом случае для доступа к БД мы могли бы воспользоваться FireDAC, а в случае с Oracle или MySQLUniDAC, или специальными компонентами доступа от DevART (ODAC и MyDAC, соответственно). Однако, в данном случае использовать прямое подключение к базе данных MS Access с мобильного устройства в принципе не возможно. Поэтому в данном случае проще использовать многозвенную архитектуру, а именно DataSnap.

купить UniDACкупить ODAC

И здесь опять возникает вопрос выбора компонентов доступа к БД. Вариантов здесь три. DBExpress, FireDAC и UniDAC. В очередной раз распишусь в своей нелюбви к DBExpress, хотя, возможно, это и субъективно. При использовании FireDAC в “классической” схеме DataSnap никаких дополнительных телодвижений использовать не придется. UniDAC использовать “в лоб” не получится, однако, этот набор компонентов так же работает с DataSnap и внятные описания имеются. Коммерческую составляющую, которая может отразится на выборе, я оставлю “за бортом”, поскольку в моем случае она не имеет значения.

купить RAD Studioкупить Delphi

Что касается репликации данных, то здесь мне повезло. Имеющийся функционал Windows приложения предполагает возможность синхронизации данных из разных баз. Соответственно, структура базы оптимизирована для репликации. Для каждой из значимых таблиц имеются уникальные идентификаторы. Так же реализованы алгоритмы синхронизации.

Если оценивать уровень сложности субъективно, то в принципе, на уровне технологии приложение должно получиться не особо сложным. Естественно, многое зависит от логики самого приложения и сложности структуры БД.

На текущий момент я сделал небольшой тестовый пример подключения к мобильного Android приложения с БД MS Access с помощью FireDAC. Так же, думаю, будет целесообразно разобраться с тем как работает с DataSnap UniDAC. Эти примеры я планирую опубликовать в следующих постах. И, естественно, для полноты картины собираюсь сделать небольшой пример репликации данных.

Интересно узнать у читателей блога, приходилось ли им решать подобную задачу и какой подход вы при этом избрали.

По традиции, предновогодний пост будет посвящен итогам уходящего года. Которые, опять же по традиции, уже можно подводить. На этот раз я постараюсь воздержаться от каких-то субъективных оценок и буду краток.

О Delphi

Для Delphi сообщества, для компании Embarcadero и, естественно, для самой среды разработки, 2013-й год был знаковый. В первую очередь потому, что была реализована поддержка самой популярной и динамично развивающейся мобильной платформы. Как следствие, вырос пользовательский интерес к продукту. Это заметно даже не вооруженным глазом, достаточно хотя бы взглянуть на количество посетивших мероприятия в рамках мирового тура RAD Studio. Естественно, что все это – плоды упорного труда команды разработчиков Delphi, и их усилиями продукт уверенно приближается к тому виду, в котором мы, разработчики конечных приложений, его хотим видеть.

В контексте вышесказанного, следует упомянуть и конкурс, который провела Embarcadero среди разработчиков. Результаты его будут скоро обнародованы. Но уже,сейчас можно говорить, что среди конкурсных работ есть очень интересные решения, да и сам конкурс вызвал повышенный интерес. Особо радует тот факт, что авторы работ с удовольствием делятся впечатлениями. Вот один из постов на Хабре.

О сообществе

Как вы понимаете, о появлении новых Delphi  блогов, в силу ряда обстоятельств, я узнаю вторым. Поэтому скажу с полной уверенностью, в 2013-м году новые блоги появлялись. Их было довольно много, и по большей части, они были интересны. Я практически полностью снял с себя ответственность за оценку “художественного уровня”, переложив ее на Всеволода Леонова и, само сообщество. Поэтому, если чьи-то блоги по каким-то причинам не попадают в ленту DelphiFeeds, я не виноват.

Отдельно хочу отметить блог Александра Люлина, являющегося, кроме прочего, Embarcadero MVP. Единственной причиной, по которой его нет в ленте, является формат его постов. Он не совсем “блоговый”, а зачастую подпадает под формат Твиттера. Хотя вези, о которых он пишет – очень интересные. Рекомендую.

О блоге

В этом году я попытался несколько систематизировать работу в блоге, писать более регулярно… Даже навел некоторый порядок. Получилось, правда, далеко не все, что задумывалось. Не все темы удалось полностью осветить, да и косяки остались (например, шрифт в комментариях). Так что, есть над чем еще работать.

Впрочем, если вы все же читаете данный пост, значит не совсем все плохо :).

О проектах

DB Meta Studio(в настоящее время ссылка не доступна).

Изначально этот проект я сделал для себя, и, можно сказать, довел до того функционала, который меня устраивает. Спасибо всем, кто помогал мне советом, некоторые из ваших предложений и пожеланий я реализовал. К сожалению, особых перспектив к массовому использованию данной программы я пока не вижу. Вполне вероятно, что выложу ее в открытый доступ с исходным кодом. Но, окончательного решения я пока не принял.

Анализатор проектов

Что я могу сказать? Теперь на вопрос, а сложно-ли перевести мой проект с Delphi 7 на Delphi XE5 я могу отвечать аргументировано, а не просто ссылаясь на собственное “экспертное мнение”. Опять же, мне этот вопрос задают немного чаще чем другим. Почему? Потому, что мои контакты видят люди, непосредственно заинтересованные в покупке Delphi.

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

Проекты для Android

Их у меня было сразу несколько, но пока ни по одному я не готов отчитаться. Однако, как любит говорить мой друг: “У мудреца в запасе целая вечность”. В конце концов, будет о чем писать в новом году!

О планах на 2014

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

В заключение, я хочу поздравить всех читателей с Наступающим  и пожелать в Новом году только положительных эмоций. Пусть в год лошади ваше трудолюбие принесет достойные плоды!

 

 

 

Продукты DevArt
Купить онлайн:



Читай русскоязычные Delphi блоги
Каталог блогов Blogdir.ru
Яндекс.Метрика