Всем привет, кто не знает меня зовут Сергей! И в очередной статье я задену разработку на Object Pascal.
В настоящее время и Delphi и FPC/Lazarus (FPC - free pascal compiler, Lazarus - IDE) поддерживают сборку под разные платформы.
В данной статье ознакомлю вас с возможностями разработки Android-приложений средствами FPC/Lazarus, в том числе и игр. И так же немного добавлю информации по Delphi, чтоб проще было искать нужную вам информацию, если вы используете данную среду разработки, но по самой разработке в Delphi для Android я не смогу вам дать достаточно необходимой информации на данный момент.
Вступление
Я достаточно случайно столкнулся с возможностью создания Android-приложений для FPC/Lazarus и прошёл довольно не малый путь чтобы более-менее понять как всё устроено и работает. За то время что я занимаюсь разработкой кроссплатформенной библиотеки ZenGL в FPC/Lazarus достаточно немало поменялось и было улучшено для удобства пользователей. В данное время, как и было раньше, самое сложное остаётся это настройка среды, для создания Android-приложений (речь не про Delphi, там вроде как из коробки всё идёт).
Здесь вы можете посмотреть видео, которые я выкладывал в процессе изучения разработки под Android.
Только начинал и это был, в тот момент, самый простой способ для меня использовать возможность использовать кросскомпилятор для создания Android-приложений. Использовался CodeTyphon.
Дальше делаю нативное приложение с использованием SO-библиотек. Используется Eclipse, но так же сейчас можно делать и для Android Studio, а вернее всего даже проще. Смотреть надо либо перематывая, либо на ускоренной скорости. Показывал полный процесс ну и ещё очень плохо зная java. )))
Дальше немного устаревшая информация по созданию APK-приложения используя ZenGL. В то время всё ещё использовался Eclipse. Но вполне возможно кому-то информация будет полезна.
В течение всего времени как я занимаюсь разработкой ZenGL, становится понятно что FPC/Lazarus не очень подходят новичкам чтобы разрабатывать приложения под Android. И даже при наличии очень немалой информации это всё равно вызывает сложности у новичков и поэтому я не советую этим заниматься людям, которые не готовы приложить усилия для настройки среды разработки и которым нужно готовое решение.
Кому-то данный процесс может показаться интересным, но большинство это оттолкнёт, в особенности если вы программируете не на Паскале.
Немного о Delphi
Я не использую Delphi для Android по простой причине, что я не видел примеров которые дают возможность создавать достаточно нативные приложения. Но недавно натолкнулся на пример и есть большая вероятность что добавлю возможность сборки ZenGL проектов для Delphi, если эти примеры в самом деле содержат такую возможность.
Среда разработки позволяет собирать проекты под Windows, Linux, MacOS, Android и iOS.
Надеюсь ни чего не пропустил, если пропустил, то надеюсь люди дополнят этот момент.
Данная среда работает с двумя языками C++ и Object Pascal. Давайте не будем спорить по этому поводу, лично я считаю что Delphi это не язык, а среда разработки. Это моё личное субъективное мнение! )))
Было выпущено несколько книг по работе с Delphi, часть из них рассказывает и про мобильную разработку:
Дмитрий Осипов "Delphi XE2", 2012
Всеволод Леонов "Обучение мобильной разработке на Delphi", 2014-1015
Рубанцев Валерий "Большой самоучитель Delphi XE3", 2013
Дмитрий Осипов "Delphi. Программирование для Windows, OS X, iOS и Android", 2014
на этом моё обозрение, можно сказать, подошло к концу. Кстати, не забывайте заглядывать на сайт Embarcadero, там вполне возможно вы найдёте интересующую вас информацию.
FPC/Lazarus требования и возможности
FPC позволяет собирать приложения под множество платформ, ознакомиться можно здесь.
Первичные требования для разработки под Android на данное время это FPC старше версии 3.0.4.
Немного об FPC.
На самом деле первые версии FPC которые собирали код для Android-приложений были сделаны достаточно давно и их версия где-то в районе 2.6.n - 2.7.n (могу ошибаться). Но на данное время было множество обновлений и изменений, поэтому и не рекомендуется использовать версию ниже 3.2.0.
Lazarus. В данном случае выбирайте один из последних и из стабильных версий. В большинстве случаев выбор версий не критичен, а зачастую последние версии несут дополнительную функциональность. Есть маленькая проблема с Lazarus, на переходных версиях могут быть несовместимости и созданный вами проект может не открываться в другой версии Lazarus. В таких случаях в каких то версиях есть поле для совместимости со старыми проектами, что не решает проблем с новыми проектами. Я же делаю своим способом: удаляю файл *.lpi и открываю в Lazarus файл *.lpr, в следствии чего Lazarus сам создаёт нужный *.lpi файл и проект нормально открывается (но это не говорит что какие-то проекты не будут глючить в следствии этого).
Недавно я делал небольшой обзор IDE Lazarus. Новичкам это может быть полезно.
С момента когда FPC начал собирать код для Android, люди начали писать множество приложений и развивать это направление.
laz4Android - сборка для Lazarus которая "идёт по умолчанию" во многих случаях. Была одной из первых.
LAMW - проект который использует laz4Android и данный проект устанавливается в Lazarus и имеет свои компоненты для разработки Android-приложений (посещайте форум, там может содержаться очень немало информации). Будьте внимательны, данный проект в определённой ревизии может быть не стабилен и надо консультироваться с разработчиком по исправлениям или использовать более раннюю версию LAMW. Так же он не совместим со стандартными LCL-компонентами. Но это не отменяет того, что с ним достаточно просто работать.
Custom Drawn Interface/Android - набор графических интерфейсов основанный на нативном Android. Наиболее совместим с LCL. Как я понимаю, в настоящее время почти не имеет поддержки.
LazToAPK - о данном проекте мало чего можно сказать, но он позиционируется как проект для помощник установки необходимых компонентов.
FPCUPDeluxe - графический установщик для FPC и Lazarus. С его помощью вы можете установить на Windows, Linux и MacOS - FPC/Lazarus а так же скачать, установить и настроить кросскомпилятор, в том числе и для Android.
Castle Game Engine - проект позволяющий создавать игры для Android. На самом деле для многих платформ используя Object Pascal.
ZenGL - кроссплатформенная библиотека (фреймворк) позволяющая создавать приложения и 2/2.5D игры (можно и 3D, если вы знаете OpenGL) без знаний каких либо графических библиотек. С основными возможностями можно ознакомится по данной ссылке.
Со всеми библиотеками я не смогу ознакомить вас в одной статье, но если вы интересуетесь, то зайдите на вики Free Pascal и там вы сможете подчерпнуть немало информации. Маленький совет, читайте не только русские или только английские ветки, а чередуйте их. Какая-то информация может устареть на какой-то ветке, а какая-то может оказаться нужной. Хотя по большей части, они наиболее совпадают.
Настройка среды разработки
Для разработки под Android я использую ОС Linux и очень сильно к ней привык, потому где-то может мелькать моё субъективное мнение. Прошу прощения за это!
Изначально вам надо установить FPC и Lazarus. Вы можете так же использовать CodeTyphon (если вы используете CodeTyphon, то часть информации идущей далее можете просто пропустить).
Установить FPC можно согласно вики. Скачав установочные файлы Lazarus здесь или с начальной страницы (FPC идёт в комплекте). А так же используя FPCUPDeluxe.
Лично я, для новичков, больше бы посоветовал использовать FPCUPDeluxe, так как это графическая оболочка и она, по большей своей части, уже делает необходимые действия, не принуждая вдаваться в лишние детали.
Прикладываю видео, где быстро пробегаюсь по установке FPC/Lazarus с помощью FPCUPDeluxe и так же показываю пример как можно для Windows установить кросскомпилятор другим способом.
Хотя на самом деле очень много уже примеров для подготовки FPC/Lazarus для работы с Android, но всё равно ещё много не согласованной информации по сборке кросскомпилятора. Вы можете, в конечном счёте, собрать его сами просто скачав для этого всё необходимое с GitLab. Но я думаю мало кто сможет воспользоваться такой возможностью (хотя даже скачав исходники оттуда, многое можно сделать практически на автомате, там подсказки есть). И именно по этой причине я советую использовать FPCUPDluxe.
Так же надо установить Java. Без Java, к сожаленью, не обойтись в настоящее время в мобильной разработке.
Дальше я бы посоветовал просто установить Android Studio и не задумываться ни о чём. В комплекте с ним идут обычно и SDK и NDK (насчёт NDK не совсем уверен, вполне возможно его надо устанавливать дополнительно). Либо вам надо будет установить SDK и NDK отдельно.
Но вполне возможно многим Android Studio понадобится для тестирования работы нативного кода. Поэтому вам выбирать что именно вы будете устанавливать.
В настоящее время все необходимые пути подтянулись у меня сами, раньше надо было их указывать для FPC/Lazarus, поэтому это тоже требует проверки.
Какую-то информацию по сборке кросскомпилятора можно посмотреть здесь, здесь или здесь. И так же многое по установке кросскомпилятора расписано на сайте Castle Game Engine.
Обратите внимание, если какой-то из способов у вас вызывает затруднение, вы можете использовать подсказки по другим ссылкам. Многое из них подобно и/или дополняет друг друга.
Создание и сборка проектов
Если использовать LAMW, то создание и сборка проекта ни как не отличается от обычного создания проекта в Lazarus. Простейший пример можно увидеть на GitHub. Напоминаю, такие приложения не совместимы с LCL-приложениями!
Примерно как это будет выглядеть:
![Создаём проект Создаём проект](https://habrastorage.org/getpro/habr/upload_files/c7d/eeb/74d/c7deeb74d1b96e9d3ea43d338484e53d.png)
![Окно настройки (в Windows выглядит немного по другому) Окно настройки (в Windows выглядит немного по другому)](https://habrastorage.org/getpro/habr/upload_files/152/bf7/a67/152bf7a67e0b910986cff993ab68b681.png)
![И сам конечный проект. Показал какие вкладки есть для создания Android-приложения И сам конечный проект. Показал какие вкладки есть для создания Android-приложения](https://habrastorage.org/getpro/habr/upload_files/f71/307/1c2/f713071c2127a2f7870ca67190460cc6.png)
в конце собираем проект и получаем APK или AAB файл.
LAMW - это одна из самых популярных библиотек для разработки Android-приложений, но я ей не пользуюсь... Она очень хороша для создания обычного приложения, вроде LCL для Windows, Linux или MacOS. Но для создания игр она не очень хорошо подходит.
Для создания игр под Android подходят Castle Game Engine, ZenGL и... как ни странно SDL... Хотя на самом деле движков для создания игр было немало, можно посмотреть на вики FreePascal часть движков. Часть из них могла создавать проекты как раз под Android, но многие просто заброшены.
С SDL многие знакомы и всё необходимое надо смотреть на их сайте и смешивать с информацией на сайте Free Pascal meets SDL. Делает кто-то на Pascal игры для Android используя SDL я не могу сказать, я не видел. Но игры используя SDL и Pascal вообще делают.
Castle Game Engine - это достаточно мощный и развивающийся графический движок. И информацию всю надо искать именно у них на сайте, в документации, их форуме или других источниках. Я в своё время пробовал, мне не очень сильно понравилось, но это моё личное мнение! Часть игр сделанных на CGE работают на Android.
ZenGL - достаточно минималистичный движок. По подготовке движка к работе с Android я расписывал здесь и там же расписано как запустить демки. По ссылке указано что используется Eclipse, но на данный момент используется Android Studio для конечной сборки проектов. Произвести надо те же действия что и для Eclipse, только папка другая для демо-версий теперь.
Неудобство ZenGL в том, что для него нет ни каких графических сред, где вы можете расставить какие-либо элементы и всё делать надо вручную. А так же для всех ваших новых проектов надо прописывать пути до модулей ZenGL и файлов настроек. Ну и этот движок в основном для 2/2.5D сделан. Так же есть возможность делать 3D приложения, но для этого надо знать OpenGL.
Достоинства: достаточно прост в создании простых 2/2.5D игр; не требует знания графических библиотек (если вы используете средства самого ZenGL); достаточно немалый функционал, который связан не только с графикой.
Видео, где производится сборка проекта используя Android Studio
Связанное
В то время когда я начинал заниматься Android, я изучал методы взаимодействия нативного кода с java-кодом. Пример из видео, где производится работа с передачей массивов из java-кода в нативный и обратно.
Пример как можно работать с логами:
Итоги
Как можно заметить FPC/Lazarus имеют немало возможностей создания Android-приложений.
Из плюсов можно отметить:
после настройки всего необходимого для создания проектов, зачастую не требуется использовать другие IDE. Всё можно собрать прямо в Lazarus и сразу тестировать.
умельцы могут разрабатывать приложение в определённой IDE и производить сборку сразу для всех поддерживаемых (и не поддерживаемых, по желанию) платформ. Для этого где-то есть готовые настройки, а где-то придётся произвести свои настройки для проекта.
Из минусов:
долгие предварительные установки и настройка.
новичкам будет сложно ступать на эту тропу.
Хотя в большинстве случаев, для создания приложений под Android всегда требуется очень много рутинной работы и дополнительные настройки. Исключением можно считать наверно только Android Studio, где (вроде как) всё изначально идёт в комплекте.
Надеюсь материал пригодится как новичкам, так и не совсем новичкам. Надеюсь ни чего не забыл упомянуть, хотя наверняка забыл.
Всего доброго!
Conung_ViC
Прям скучаю по временам, когда на Дельфе (7й) писал. Как жаль что борланды всё продолбали...
PsihXMak
Почему продолбали? Чем последние версии не устраивают?
Conung_ViC
Популярность продолбали. но это только мое ощущение.
Т.е. в 2005-2010 - дельфи можно было встретить почти везде (мне так казалось), а потом их доля резко пошла на спад.
PsihXMak
Думаю, дело в том, что они ушли из потребительского сегмента в корпоративный. Заняли свою нишу и работают с нескольким десятком клиентов, которые приносят им стабильный доход.
randomsimplenumber
Тем что всё вручную. Вот например, понадобился вам protobuf свежий. А его нет.
PsihXMak
Не вручную, а скорее, нанимаешь программиста, который пишет тебе поддержку нового формата и внедряешь у себя. Такая специфика)
mentatxx
Ценовой политикой и не умением строить и развивать комьюнити
Groramar
Никогда не понимал людей, жаждущих писать абсолютно исключительно на топ-5 языках. В мире, на минуточку три тысячи ЯП! Но как только язык выпал из топ-5 он почему-то автоматом у нас считается плохим, устаревшим, и т п. Я вот не скучаю по временам, а тупо пишу на Делфе и иногда Лазаре, чем очень доволен во всех смыслах.
alexandrustinov
Против Delphi в свое время была развернута мощная ИПСО компания со стороны маркетологов C#, т.к. они примерно в одной нише. И главный таран - тезис, что дескать за C# платят больше ЗП, и только неудачники пишут Паскале. Вполне сработало.
Сейчас аналогичное ИПСО заряжают в React и Rust, те-же внешние признаки пропаганды и манипуляций.
randomsimplenumber
C# емнип раздавался бесплатно, embarcadero хотели денег сразу и достаточно много. Сложно устоять против такого ипсо.
alexandrustinov
Visual Studio всегда стоил весьма ощутимых денег, это потом уже сделали бесплатные редакции. И сейчас тоже стоит весьма прилично для предприятий, Community Edition это так, на "посмотреть".
Delphi изначально появился как прямой конкурент Visual Basic (а бейсик это первый проект мелкомягких, типа святое), вот с тех пор Delphi и хоронят усиленно. Но, что удивительно, похоронить полностью так и не получилось за три десятка лет.
randomsimplenumber
VS express бесплатно вышел в 2005. Delphi продали embarcadero в 2008. Вот с этого момента пожалуй и всё. мало кто будет покупать для поиграться при наличии бесплатного аналога.
А хоронят его те же, что и Windows. Зачем его хоронить, денежку приносит же.
HemulGM
Для "поиграться" RAD Studio уже несколько лет тоже имеет Community Edition версию.
randomsimplenumber
Ну, лучше поздно чем никогда. Но этот поезд 19 лет назад ушел. Раньше надо было community привлекать.
randomsimplenumber
Ну и прекрасно ;) Религия должна помогать а не мешать. Просто в один прекрасный момент окажется что ваши исходники передавать некому - все ушли на С++ 30, rust 10.0 и python 4.99.
StriganovSergey
Нейросети потом все сконвертят во что угодно, если потребуется.
randomsimplenumber
берите дальше, напишут ещё лучше.ох уж эти волшебные нейросети
StriganovSergey
1 - создание сложнее чем переделка.
2 - к тому моменту, когда потребуется перенос, (через несколько лет), техника работы с кодом у нейросетей будет значительно лучше чем сейчас.
Я и сам в этом месяце начал писать прототип приложения на C++Buider
просто потому, что мне так быстрее.
И планирую сделать потом такой перенос, если проект доживет до такой необходимости.
Seenkao Автор
Основы как были так и останутся основами. И на каком бы ЯП они не были написаны, они всегда будут нести нужную информацию.
vdudouyt
Насколько я помню, то спад начался именно с одотнечивания. Я сам, помнится, порядком приуныл, когда при обновлении до очередной версии увидел окно установщика .NET - особенно когда оказалось, что это означает, что 1) нативный код больше тютю 2) теперь придется предлагать пользователям помимо своей софтины ставить еще и .NET. (Да-да, время синьоров стоит дороже всех этих мирских сует, однако мы, плебеи, к такому положению дел оказались как-то морально не готовы).
Собственно, именно тогда я окончательно забросил Delphi, к тому же к тому времени я уже подкачался до C/C++. А потом и вовсе сменил ОС.
Ну а живой софт на Delphi, как ни странно, иногда где-нибудь лицезрею (как, например, в магазине в Анталье). Причем именно на Delphi 7, как последней неодотнеченной ))
Groramar
В смысле нативный код тютю? Delphi всегда был и есть нативный. Параллельно могло донетное в нескольких версиях собираться лет почти 20 назад. Потом и это убрали.
salnicoff
Delphi 8 был исключительно для .NET, и все кричали, что D7 — это последнее, что может собирать нативный код, дальше будет все только .NET, ибо так сказал Билл Гейтс, и т. д. и т. п. Все книжки по Delphi переписали под идеологию .NET, а потом народ взбунтовался, и следующую версию Delphi пришлость опять делать под нативный код.
alan008
Delphi for .NET это у них мертворождённый проект получился, он давно закрыт. Delphi сейчас генерирует нативный код под Win, MacOS и с натяжкой под Linux, а также некий код (о степени наивности которого я не осведомлен) под Android и iOS
HemulGM
Вы ошибаетесь. Лишь Delphi 8 был для .Net платформы. При этом не единственно возможной. Все последующие версии просто уже не позволяли собирать для .Net. Т.е. Delphi никогда не становился .Net зависимым, он лишь позволял писать под .Net. Ты и сейчас можешь использовать Delphi в связке с .Net библиотеками, например, для создания WPF с XAML.
Другими словами, в текущем состоянии Delphi не зависит от .Net или чего-то подобного.
alexandrustinov
Это, мягко говоря, не так. IDE примерно с 2007-й версии вобрала в себя очень много .NET барахла внутри, в виде всяких Borland.Studio.Vcl.Design.Refactoring.dll и т.д., что никак не могло положительно сказаться на ее стабильности.
И в последних версиях ситуация не улучшилась, что блокирует ее (IDE) портирование на Linux и macOS.
Но сами Win32/Win64 Native приложения никогда не были зависимы от .NET, если только ты сам эту зависимость туда не вкрутишь.
HemulGM
Delphi и RAD Studio это разные вещи. И речь шла о конечной программе и её зависимостях, а не о среде разработки.
А вот приложения, созданные в Delphi 8, являлись .Net программами.
То, что среда разработки использует .net, известно. Но это не является основной проблемой портирования IDE под другие платформы. Основная проблема - VCL.
alexandrustinov
VCL это проблема? CLX (Kylix), LCL (FPC/Lazarus) - могут и не согласиться.
Да и при желании можно было сделать эмулятор нужных win32 API, вместо отдельного приколхоживания этого вашего FMX.
Реальная же проблема VCL там была скорее в таких штуках, как Comctrl32, где в 100500 версиях с не меньшим количеством багов в каждой сидели зашитые в Windows имплементации TTabControl, TTreeView, TRichEdit и так далее - вот их реально нельзя было никуда портировать, слишком сложно. А так сама по себе VCL она не сильно в своих внешних API на Win32 заточена, не то что MFC, можно было при желании сделать и кроссплатформенный ее вариант.
Впрочем, сейчас, в процессе доживания Windows - это уже малоактуально, HTML5/CSS3 всех победил.
Extortioner
из того, что помню и частично пользуюсь сам на делфях написаны: AIMP, софт от Faststone, FL Studio, Total Commander, KM Player