Кросс-платформенная разработка приложений для Windows и Linux

Кросс-платформенная разработка приложений для Windows и Linux

Можно ли запустить PC-приложение на мобильном телефоне? Ответ на этот во­п­рос за­ви­сит от спо­со­ба раз­ра­бот­ки при­ло­же­ния и его воз­мож­но­стей. По­ста­ра­ем­ся при­бли­зить­ся к этой про­бле­ма­ти­ке с прос­тей­ших, в чем-то да­же на­ив­ных опы­тов, в хо­де ко­то­рых при­ло­же­ние с интер­фей­сом GUI по­сле­до­ва­тель­но ком­пи­ли­ру­ет­ся и за­пу­с­ка­ет­ся в сре­де Li­nux64, Win64, Win32, And­ro­id. В про­цес­се экс­пе­ри­мен­та мы ожи­да­ем по­лу­чить на эк­ра­не два текс­то­вых со­об­ще­ния и кноп­ку. Бу­дем про­грам­ми­ро­вать так, что­бы пос­ле на­жа­тия кноп­ки текст вто­ро­го со­об­ще­ния, а так­же его цвет фо­на и сим­во­лов из­ме­ни­лись. Ком­пи­ли­ро­вать бу­дем с по­мо­щью Free Pas­cal в сре­де раз­ра­бот­ки под на­зва­ни­ем Lazarus, ис­поль­зуя со­от­вет­ст­ву­ю­щие его вер­сии для сбор­ки под раз­ные опе­ра­ци­он­ные сис­те­мы.

Компилируем, запускаем и снова компилируем

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

Начнем опыт в среде Linux x64.

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

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

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

Создаем текстовую метку.

Определяя свойство OnClick объекта TButton создаем процедуру для обработки нажатия на кнопку. Записываем операторы, изменяющие текст, цвет фона и цвет символов (фонта) для метки.

Компилируем и запускаем приложение (клавиша F9).

Нажимаем кнопку мышкой и видим изменения второй надписи. Проверка под Linux завершена.

Запускаем IDE в среде Windows 7 64-bit.

Также запускаем приложение.

Видим такой же результат.

Запускаем IDE в среде Windows XP 32-bit.

Также запускаем приложение.

Видим такой же результат.

Запускаем интегрирующую оболочку laztoapk. и эмулятор Android Virtual Device. Подключены пакеты Android SDK (Software Developer Kit), Android NDK (Native Developer Kit), JDK (Java Developer Kit) и утилита lazbuild.exe. На сегодня, подружить четырех перечисленных монстров удалось только под 32-битной ОС, поэтому надеемся на скорый выход стабильных релизов интегрирующей оболочки. Кнопкой на верхней панели запускаем Lazarus.

Запуск IDE Lazarus. Скомпилировать исходный проект в неизменном виде не удалось, кроссплатформенность пока далека от идеала. Анализ и грамотное построение контекста Android-приложения будет темой отдельного исследования. А на данном этапе, возьмем один из готовых примеров, удалим его основное содержимое (сохранив копию), поместим операторы, реализующие пользовательский интерфейс нашего простейшего приложения и запустим компиляцию (Shift-F9).

Компиляция успешна. Процессор ARM, операционная система Android. Очевидно, запустить такой проект под Windows нельзя. Также акцентируем внимание на необходимости соответствия установленной процессорной архитектуры для компилятора и эмулятора Android Virtual Device. Очевидно, под что компилировали, на том и запускаем.

Выходим из Lazarus, возвращаемся в интегрирующую среду. Нажимаем кнопку Build & Deploy.

На этом этапе выполняется несколько операций, существенных для понимания происходящего. Результат компиляции проекта, файл *.SO (Linux Shared Object) преобразуется в файл *.APK (Android Package). Этот файл загружается на виртуальное устройство.

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

Приложение запущено успешно, дизайн пользовательского интерфейса изменился до неузнаваемости. Кроме того, было замечено, что если надпись заканчивается символом «d», фрагмент последнего символа строки «затирается», возможно это происходит и с некоторыми другими символами, все возможные символы не проверялись. Проблема устраняется добавлением пробела в качестве последнего символа. Вместо надписи CPHW (Cross Platform Hello World) в шапке окна выводится project1. Еще есть над чем поработать.

Нажимаем кнопку, цвет и содержимое текстовой метки изменилось.

Резюме

Разумеется, после запуска простейшего примера выводы делать преждевременно. Вместе с тем, как видно по результатам, исследуемая среда разработки обеспечивает достаточно безболезненный переход между системами Linux и Windows, если, конечно, разработчик не применил неких конструкций, специфичных для заданной ОС либо аппаратной платформы. В случае адаптации PC-приложения для Android можно говорить лишь о некотором уменьшении трудоемкости процедуры портирования, что пусть и неплохо, но к реальной кросс-платформенности имеет весьма отдаленное отношение.

Литература

Процесс инсталляции интегрирующей среды, необходимой для построения Android проектов, описан в документе Lazarus and Android.

Публикации на тему кросс-платформенных разработок: