Продолжаем нашу серию статей по Delphi. В предыдущем материале мы скачали и установили бесплатную версию Delphi и запустили простейшую программу под Windows, сегодня наша цель: разработать первое приложение на платформе Android и запустить его на своём телефоне.
1. Подготовка среды разработки Delphi для создания Android-приложений
Установим все необходимые инструменты для разработки. Нажмите в главном меню Tools — Manage Platforms
Выберите вкладку Additional Options и там отметьте галочками Java Development Kit 1.8 и Android SDK 25.2.5 — NDK r17b. Нажмите Apply — это запустит процесс скачивания и установки компонентов.
Процесс довольно длительный, может потребоваться перезапуск среды разработки. Старайтесь не нагружать компьютер другими операциями. После успешного завершения вы увидеть надпись Operation Completed.
Нажмите Start working — среда разработки готова к созданию Android-приложений.
ЗАМЕЧАНИЕ. Я протестировал разные варианты установки компонентов Android на нескольких компьютерах и операционных системах. В том числе: когда SDK уже установлено (с Android Studio), когда компоненты ставились вручную с серверов Google, когда использовалась виртуальная машина AdoptOpenJDK. Если вы хотите пойти таким же сложным путём (ручная установка), вот некоторые параметры работающих версий: AdoptOpenJDK (Windows 64-bit OpenJDK 8 (LTS) with HotSpot JVM), Android SDK (sdkmanager «build-tools;29.0.0» «extras;google;usb_driver» «platforms;android-26» «tools» «platform-tools» ), Android NDK r17b.
Если автоматическая установка не сработает, пишите вопросы в комментариях — я постараюсь ответить и дополнить статью.
2. Подготовка проекта Android-приложения
Нажимаем на главном экране (Welcome Page) Create a new Multi-Device Application — Delphi.
Выбираем Header/Footer (шаблон приложения с шапкой и подвалом) и жмём ОК.
Создаем папку проекта, я рекомендую поместить её в каталог C:\work и назвать HelloAndroid
Внесем небольшие изменения в наше приложение. В шапке формы напишем Привет Android. Для этого нажмём на метку HeaderLabel на форме и слева внизу найдём параметр Text.
Изменим его значение на Привет Android — и увидим, что изменился текст на форме.
Запустите эту программу под Windows (нажмите F9) — вы увидите обычную форму. Программа работает.
Переключим целевую платформу для компиляции приложения на Android в правом верхнем углу экрана (дважды щёлкните названии платформы).
Без телефона запустить приложение не получится. Давайте его настроим.
3. Настройка телефона для разработки Android
К сожалению, каждый телефон настраивается по-своему. Я расскажу общую схему на примере моего Xiaomi Redmi Note 4.
Для начала нужно включить режим разработчика. Необходимо зайти в Настройки — О телефоне и семь раз тапнуть пункт — версия MIUI (для телефонов Huawei, например, нужно сделать следующее: окне «О телефоне» необходимо не менее 7 раз нажать по строчке «Номер сборки»).
После этой процедуры зайдите в пункт меню Расширенные настройки, там нажмите Для разработчиков.
В меню разработчиков нужно включить кнопку Отладка по USB и затем Установка через USB. (Нюанс: для Redmi Note 4 в этот момент должна быть вставлена SIM-карта. После включения этих опций симку можно вынуть).
На других телефона процедура выглядит примерно также. Для вашей модели телефона инструкцию включения режим разработчика ищите в Google по запросу: «как включить режим разработчика для *название телефона*» или «как включить отладку по USB для *название телефона*».
После включения этих опций берёте хороший USB-кабель (например, которым заряжаете ваш телефон) и подключаете к компьютеру. На Windows 10 драйвера не потребовались, телефоны Android система определяла сама. Для Windows 8 потребовалось скачать ADB-драйвера для конкретной модели телефона. Они также гуглятся. Скачать подошедший мне adb-драйвер можно с нашего сайта.
При подключении устройства телефон может попросить разрешить отладку через USB для конкретного компьютера. Ставим галку и соглашаемся, нажав ОК. Если не успели, вытаскиваем кабель и вставляем снова.
Но может и не попросить, зависит от модели. Теперь важно, чтобы телефон увидела Delphi.
Скорее всего, после успешного подключения среда разработки подхватит устройство автоматически. Если этого не произойдёт, попробуйте нажать кнопку Refresh devices (обновление устройств). Справа от надписи Android вы увидите название вашего смартфона.
Всё готово к запуску приложения.
4. Запуск приложения на Android
Нажмите F9 (зелёный треугольник в панели управления) для запуска приложения.
Пока программа будет компилироваться, внимательно следите за вашим устройством Android. После создания файла apk (установочного файла Android-приложения) на компьютере он будет передан на ваш смартфон. Например, мой Xiaomi Redmi Note 4 даёт только 10 секунд на подтверждение установки. Если вы не уложитесь в это время (не успеете нажать Установить), установка будет отклонена и её нужно будет запускать заново, нажав F9 в Delphi.
К счастью, можно запомнить этот выбор для конкретного приложения. Ставьте галку (на скриншоте я ещё это не сделал) и нажимайте Установить, когда увидите подобный экран:
Подождите ещё немного — и приложение запустится! Ура!
Значок приложения появится также на рабочем столе вашего смартфона — вы можете запустить его снова или удалить. Для продолжения работы удалять его не нужно, при запуске новых версий из среды разработки Delphi будет заменять его на более свежую версию.
НЮАНС. Если один раз приложение установилось, а потом появляется ошибка, попробуйте удалить его с устройства. Это может быть связано с изменениями настроек телефона, подключением телефона к другому компьютеру и т.д.
Пока приложение совсем простое. Усовершенствуем его — добавим ввод данных.
5. Ввод данных в Android-приложении
Добавьте на форму текстовое поле, для этого найдите компонент TEdit в палитре компонентов (воспользуйтесь поиском, как показано на скриншоте) и перетащите его в верхнюю часть формы.
Под ним добавьте компонент кнопки TButton, как в предыдущем уроке. На самой кнопке напишите слово Приветствие, использовав его поле Text в инспекторе объектов. Ваш экран будет выглядеть примерно так:
И для текстового поля, и для кнопки измените в инспекторе объектов следующие свойства:
- Align = Top
- Height = 44
Элементы прижмутся к верхней части формы и станут в 2 раза выше, это сделает работу с программой удобнее (особенно на Android). Выглядеть в среде разработки это будет вот так:
6. Нажатие кнопки
Теперь напишем обработчик события — нажатия кнопки. Для этого дважды щёлкните на кнопке с надписью Приветствие — откроется редактор кода. Впишите (или скопируйте с этой страницы) туда следующий текст:
1 |
ShowMessage('Привет тебе, ' + Edit1.Text); |
В этой строке с помощью функции ShowMessage мы показываем простое диалоговое окно, которое содержит текст «Привет тебе, » и содержимое текстового поля Edit1.
Экран должен выглядеть так:
Кстати, чтобы обратно переключиться на режим редактирования формы (окна приложения), нажмите Design в правом нижнем углу текстового редактора.
Переключите целевую платформу разработки на Windows и запустите приложение (F9)
Я рекомендую отрабатывать алгоритм приложения и тестировать его под Windows, чтобы ускорить процесс разработки. Компиляция и запуск происходит в этом случае намного быстрее. После того, как вы получите работающую версию, переключайтесь обратно на Android и запускайте приложение снова.
Посмотрим, как программа работает под Windows. Введите текст и нажмите Приветствие.
Отлично! Теперь переключитесь обратно на Android и запускайте вашу программу на устройстве. Там тоже всё работает:
Поздравляем! Ваше приложение заработало на смартфоне! (Если не заработало, пишите вопросы в комментариях).
Домашнее задание: поменяйте надпись на метке Привет Android на Введите своё имя и измените цвет метки (свойство TextSettings — Font — Style — fsBold = True).
Здравствуйте. Спасибо за статью, очень интересно было узнать, что на современном Delphi можно создавать Android-приложения. Раньше Delphi была любимой средой. Такие вопросы, можно ли писать код на Kotlin и на сколько серьезные мобильные приложения можно создавать таким образом на Delphi?
Рад, что вам понравилось. На Kotlin не получится, в Delphi будет работать только Pascal (вернее, его разновидность). К сожалению, любое мультиплатформенное решение сейчас вряд ли подойдёт для сложных разработок, потому что каждая платформа (Android, iOS, Windows) старается перетащить программистов в свою среду. Конкретно на Delphi мне удавалось взаимодействовать с устройством (например, выполнять звонки), работать со встроенной базой данных SQLite и другие несложные задачи. В итоге, нужно смотреть от целей и задач.
Расскажите подробнее, как Вы взаимодействовали с SQLite?
Подключался к SQLite c помощью FireDAC
Доброго времени суток! Подскажите пишу программу простую, под Android нужно из memo текст (name.тхт) во внутренней или на SdCard в свою папку. У меня выдаёт при сохранении Cannot create file «/name.txt». Not a directory. Заранее спасибо!
Здравствуйте!
Подскажите пожалуйста почему у меня установился 32-разрядный Delphi
вместо 64-разрядного ?
Так сложно сказать. А как вы определили, что 32-разрядный? Пришлите скриншот
При компиляции приложения на телефоне оно компилирутся на устройстве и тут же переходит в фоновый режим. Раньше такого не было. Причем одинакого на любом устройсьве.
С такой проблемой я не сталкивался
Попытка сделать все по Вашей статье заканчивается ошибкой — [PAClient Error] Error: E2564 Could not find program, ‘C:\bin\JarSigner.exe’
Есть ли у вас JarSigner.exe в указанном каталоге? На каком этапе возникает эта ошибка? Лучше пришлите скриншот на info@progtips.ru
Во… пролезло. 🙂
Повторюсь… даже каталога bin не существует, если разговор о машине — C:\bin…
И вообще, где можно что-то почитать про этот пакет. А то все, что делал на D7 — теперь на 10-ке… в топку…
К сожалению, мало информации — присылайте скриншот, как я писал выше. Как я понял, проблема в том, что не установлен (не настроен) Android SDK. Читайте: https://stackoverflow.com/questions/58740154/error-e2564-could-not-find-program-c-bin-jarsigner-exe и https://www.programmersforum.ru/showthread.php?t=312569
Сергей Садков, скажите пожалуйста, можно ли работать с Wi-Fi, а именно
подключаться к определённой точке доступа непосредственно из кода и отключаться от неё? Заранее, спасибо! И с уважением, Ростислав..
Сам не тестировал, но посмотрите эти статьи:
https://delphifmandroid.blogspot.com/2014/04/android-api-package-androidnetwifi-wi-fi.html
https://stackoverflow.com/questions/37587098/how-to-programmatically-enable-wi-fi-on-android-device-in-delphi
Сергей, спасибо за молниеносный ответ!
Бред, какой-то геморрой с этим делфи, ни как не хочет видеть JWifiManager…
Программирование на Delphi. Часть 2 опубликована еще 17 января А продолжение ожидается?
Да, будет. Добавим SQLite ещё. Следите за рассылкой
Вопрос по использованию БД. Есть желание из Андроидприложения обратиться к БД, которая находится в Интернете (на сервере). Планирую использовать FireDAC (кстати — можете сказать что-то плохое про этот компонент и его работу с PostGres. Компоненты коннектятся к удаленной БД. А соединение шифруется? Или пароли передаются в открытом виде?
1) Т.е. могут перехватить пароль ?
2) Запросы, которые я посылаю к БД — их могут перехватить ?
Подключался к SQLite в помощью FireDAC, всё было ок. Соединение можно зашифровать, TSL/SSL
Здравствуйте Сергей можно ли хорошую мобильную программу для дипломной работы на Rad studio ?
Если да то какое бы приложение подошла бы для создание на Delphi?
Для диплома я бы брал все-таки более популярные языки, чтобы легче было искать документацию (Kotlin, для простых приложений QT)
Сергей, здравствуйте. Я хотел бы спросить у вас, как у специалиста. Дело в том, я тоже пробую разработать мобильное приложение. У меня возникла наверное банальная но всё-таки очень странная проблема. Когда я создаю Multi-Device Application — Delphi и пытаюсь на форму добавить изображение, у компонента TImage попросту отсутствует свойство Picture (и расположен компонент не в привычной Additional, а почему-то в Shapes). Причём, если создать обычный проект Delphi, Image расположен где надо и со всеми нужными свойствами прекрасно функционирует. У меня Rad Studio 10.3, но такой же коллапс был и на версии 10.2( не однократно переустанавливал). Если вы с таким сталкивались или может быть слышали, это глюк или так и должно быть? Как можно решить эту проблему? Может можно каким-то другим компонентом добавить изображение на форму? Заранее огромное спасибо.
Направление верное, только нужно использовать у TImage другое свойство: MultiResBitmap. Открыть его, создать new item и загрузить картинку. Вот статья по теме: http://docwiki.embarcadero.com/RADStudio/Rio/en/Using_FireMonkey_Image_Effects
Да, теперь всё получилось. Спасибо Вам просто огромнейшее.
Сергей, здравствуйте. Хотел поинтересоваться. Такая ситуация: на форме 1 в переменную заносится значение, на форме 2 из этой переменной его нужно считать, форма 2 видит переменную, описанную в форме 1. Обе формы связаны. Но считывать значение форма 2 не хочет, выдаёт, что в переменной 0. Хотя обе формы связанны в uses и переменная описана глобально. Как решить данную проблему?
Здравствуйте! Тут, к сожалению, надо код смотреть и искать ошибку. В рамках комментария к статье помочь не смогу
Пожалуйста, не могли бы вы уделить мне немного вашего внимания и времени?. Если да, то как с вами можно связаться?
Заранее, огромное спасибо.
Здравствуйте!
К сожалению, по Delphi подсказать не смогу сейчас — большая загрузка по другим проектам
Сергей, к вам такой вопрос. Если у меня бесплатная версия turbo delphi,
возможно ли на нее установить sdk java и android sdk или эти два пакета устанавливаются только на новых версиях delphi ?
Turbo Delphi не пользовался, поэтому подсказать не смогу
Напишите, пожалуйста, статью, как делать бандлы (32 и 64-бит) и заливать их на Google Play.
Здравствуйте, вопрос не по теме. Во время ЧП студенты учатся онлайн, поэтому вообще сущетвует среда Дельфи для смартфонов?
Нет, только для десктопа
Друзья! Не заморачивайтесь с Делфи под андроид. Ставьте БЕСПЛАТНУЮ андроид-студию, учите джаву или котлин, и будет вам счастье.
В статье рассматривается универсальная среда для разработки под Windows, Mac OS, iOS и Android. Вы предлагаете вместо одной универсальной среды изучать кучу специализированных. В чем тут счастье?
Здравствуйте, случайно удалил из проекта целевую платформу android64, ума не приложу как ее вернуть обратно. Для Google play нужна 64 версия. Спасибо
Вот здесь об этом подробно: http://docwiki.embarcadero.com/RADStudio/XE7/en/Project_Manager#Target_Platforms_Context_Menu
Нужно вызвать в ProjectManager контекстное меню на Targets
Здравствуйте, пытаюсь скомпилировать на смартфон проект с delphi, выдает ошибку! Подскажите?
Не видно саму ошибку на скрине. Надо попробовать переустанавливать JDK, если под Windows компилируется. Обычно все проблемы в связки с JDK
Здравствуйте, установил все по инструкции Windows 32 и 64 бит, Android Sdk. Так вот при создании мульти проекта доступно Windows 32, 64 бит и Андроид только 32 бит. Что нужно сделать чтоб было Андроид 64 бит?
Здравствуйте, Сергей! Подскажите, пожалуйста, это нормально, что папка с проектом «весит» 500 Мб?
Да, это нормально. Включается куча библиотек и отладочной информации
Delphi 10.2
На телефоне выскакивает сообщение: «Это приложение было создано для более старой версии Android и может работать со сбоями.» Попытка обновится в SDK Manager мне просто всё сломала: малопонятные ошибки проект не собирается.
Ко всему прочему — даже пустое окошко приложение требует просто огромного количества разрешений — включая звонки и геолокацию. Я полагаю — это из-за включеных по умолчанию в Libraries огромного количества библиотек, включая какую-то аналитику.
Напишите, пожалуйста, как правильно обновить SDK до актуальной версии, и как управлять требуемыми разрешениями и библиотеками, поскольку их простое отключение ситуацию никак не меняет.
Ну, или посоветуйте вменяемую литературу по мобильной разработке на Delphi, а то с той, что находится в гугле, как-то не очень всё: «тяп-ляп хелоуворд, дальше топетришь сам…» 🙁
Извиняюсь, за даблпост, но в догонку — ресурсы типа:
«embarcadero.com/ бла бла бла /adding_an_android_sdk.html» я, конечно, изучал, и даже перепробовал огромное количество комбинаций build-tools’ов и SDK Platform, и даже ставил сторонний adb; но в конце концов просто полностью переустановил Delphi.
Очень нужно нормальное руководство, пожалуйста.
Здравствуйте.
Не отображается телефон. Хотя ADB драйвер установился. Режим отладки включил, все как у вас написано. Rad Studio 10.4.2. Дома главное видит, а на работе нет. Что можно сделать?
Получается Паскаль в Яву компилится?
Это нормально. нынче все языки под капотом имеют другие языки, хотя всё в конце концов работает на ассемблере. тем более, что паскаль сильно расширился и имеет в своём арсенале почти всё что есть в с++. А учитывая наличие c++ builder с тем же функционалом, я подозреваю, что они в c++ с использованием ndk мутять.
ДД. Не подскажете: создал приложение и тестирую на андроиде. Но некоторые компоненты не обновляются. Например, изменил название кнопки, но в андроиде не обновился, показывает старое имя. А код обновляется. Если что то добавить, то они появляются. Как будто кэш хранит. Удалял приложение, но не помогает.
Добрый вечер. У меня выходит в делфи ошибка [Exec Error] The command «»C:\Program Files\Java\jdk1.8.0_192\bin\KeyTool.exe» -genkey -v -keystore «C:\Users\netdoom38\AppData\Roaming\Embarcadero\BDS\20.0\debug.keystore» -storepass android -alias androiddebugkey -keypass android -dname «cn=Unnamed, ou=Mobile Organization, o=Embarcadero Technologies, l=San Francisco, s=California, c=US» -keyalg RSA -keysize 2048 -validity 10000″ exited with code 3.
Что делать?
Уже решил проблему