pascal код для андроид
Есть ли компилятор Pascal на Android?
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Компилятор C++ Android
Помогите пожалуйста найти компилятор c++ android.
Компилятор C++ для Android.
Знаю что существует компилятор Pascal на Android,а есть ли такой для C++? Тоесть чтобы на планшете.
Построковый компилятор на Android
Требуется построковый компилятор с++ на Андроид, чтобы ошибки в коде выловить. Необходимо.
Компилятор Pascal
Есть ли компилятор Pascal для мобильных телефонов?
Добавлено через 7 минут
нафига какието замарочки для паскаль, если всё нормально разработано на почти паскале? смущает пара других синтаксических знаков? Да нафига из-за того тогочтоб было «комфортно» переписывать вообще всё? Да вы обурели паскальщики? Воткнули в программирование X:=1 и без этого жить не можете? А Х=1 уже не понятно? Если вам нужна эффективность, да забейте на свой синтаксис! Вам придётся писать на том, на чём написаны библиотеки, и ваш паскаль не спасёт вас ))
2bilolbek: Советую изучить яву под андроид. Синтаксис заменится легко, а вот структура проекта явно хуже. Прийдется ломать психологию и перестраивать логику. Я за почти 2 года так и не смог подделать некоторые свои любимые конструкции из Делфи.
Не собирался относиться неуважительно к любителям паскаля. Извините если выразился неаккуратно. А вот про логику проекта тут странно как-то выглядит )) Ну разве сама по себе разработка под андроид не подразумевает некоторый компромисс между привычной структурой проекта на паскале под виндовс например и под андроид? Отвёрткой гвозди не закручивают, это понятно, но с другой стороны зачем забивать гвозди если у вас полно шурупов и есть шуруповёрт? Может надо быть гибче и изобретательнее, а не сваливать всё на среду разработки, её ведь не дураки придумывали. Поэтому поуважительнее к любителям чего-то кроме паскаля ))
Добавлено через 5 минут
Я может тоже хочу на си++ писать под андроид. Но какой смысл если всё там заточено для джавы? Можно написать классы на с++, потом перевести на джаву и потом прикрутить к андроид проекту. Ничего не напоминает? Сколько весит разработанный на паскале проект?
Как сделать apk приложение на Паскале?
2. В нем мы пишем программу, либо вставляем имеющийся код.
3. Далее удерживаем кнопку «Compile», если в программе нет ошибок, то откроются настройки компиляции.
4. В первой строке вводим путь к конечному apk приложению.
5. Во второй название компилируемых пакетов (можно оставить по умолчанию нам они не понадобятся).
6. В третьей название нашей программы.
7. И в четвертой по желанию указываем путь к png картинке которая будет иконкой приложения.
8. Жмакаем Ok и идем в проводник смартфона, в указаной папке вы найдете скомпилированное приложение, его останется только установить и оно появится на рабочем столе.
Таким образом можно получить несложное андроид-приложение на паскале!
Еще больше интересного контента на нашем канале: https://t-do.ru/smartmachinka Подписывайтесь.
Найдены дубликаты
Я просто оставлю это здесь.
Бля помогите у меня при нажатии на «Compile» тупо выдает «Cannot Link Executable.
Помогите, что делать?!
Это, конечно, можно, но зачем? Есть же Java
Ладно хоть не триместр :)))
Ответ на пост «Когда попытался исправить провалы в образовании. »
Добавлю и я свои пять копеек в образование. Есть замечательный канал преподавателя информатики и программирования Тимофея Хирьянова, который ведёт лекции и обучению по С++ и Python. Порекомендую поучиться у него многим преподавателем данного направления.
Нейронные сети. Формулы обратного распространения
Представляем заключительную лекцию из курса по нейронным сетям от 3blue1brown. В этой лекции речь пойдет о формулах обратного распространения. Одной из важных тем, которая позволит разобраться с основными моментами дифференцирования сложных функций в контексте сетей.
Благодарим за создание выпуска:
Переводчика – Федора Труфанова;
Редактора – Михаила Коротеева;
Диктора – Никифора Стасова;
Монтажера – Олега Жданова
Нейронные сети. Обратное распространение ошибки
Привет, Лига образования!
Мы продолжаем переводить легендарный курс по нейросетям от 3blue1brown.
В предыдущей лекции мы узнали о градиентном спуске. Сегодня речь пойдет о методе обратного распространения — главном алгоритме обучения нейронных сетей.
Благодарим за создание выпуска:
Редактора – Михаила Коротеева;
Диктора – Никифора Стасова;
Монтажера – Олега Жданова
И бонус в комментариях, английский!
Нейронные сети. Градиентный спуск: как учатся нейронные сети
Обучение — сложный процесс не только для человека, но и для сущностей, порожденных разумом человека.
Мы подготовили долгожданное продолжение лекций по нейросетям. Градиентный спуск: как учатся нейронные сети.
Благодарим за участие в выпуске:
Редакторов – Дмитрия Титова, Михаила Коротеева, Дмитрия Мирошниченко;
Корректора – Дмитрия Мирошниченко;
Дикторов – Никифора Стасова, Дарью Яговкину;
Монтажера – Олега Жданова.
«Даром преподаватели…» или с помощью моделирования восполняем пробелы в знании азов электроники
В минувшем году у меня наступило осознание того, что слова популярной песни Аллы Борисовны относятся ко мне.
Похоже, что в юношеские года: «Даром со мною мучился самый искусный маг». Многие азы из мира электроники я так и не усвоил.
Было принято решение взять «какую-нибудь книжку» по теме. К сожалению, учебник по микропроцессорной технике был заброшен уже на 40 странице. Оказалось, что просчитать в уме значения на выходе всяческих цепочек из логических элементов, триггеров, шифраторов, мультиплексоров для меня сложновато, поэтому чтение книги превращалось в пытку с 10-ти минутным залипанием над каждой схемой в попытке понять почему именно на выходе триггера получается «1» или «0».
Однако, недавно мне в руки попался контроллер (Canny 3 tiny), который программируется без единой строчки кода. Программа для него представляет собой схему, на которой размещены всё те же элементы: логические блоки («И», «Или», «Не» и т.п.), триггеры, сумматоры и так далее, которые остаётся только между собой соединить.
Вы спросите: «Почему я ни с того ни с сего пишу про какой-то контроллер?».
Оказалось, что в среде разработки программы для контроллера есть режим симуляции схемы, в котором можно потыкать все эти элементы, задать значения на входах и посмотреть, что будет на выходе. Это очень сильно облегчает восприятие учебного материала.
Думаю, что программа изначально не задумывалась разработчиками для обучения азам электроники. Некоторые моменты могут быть неочевидными, поэтому я решил поделиться с вами парой примеров такого необычного её применения.
На Windows 10 у меня выпадет предупреждение SmartScreen о том, что программа взята из неизвестного источника, не бойтесь и смело нажимайте «Выполнить в любом случае». Я проверил папку встроенным антивирусом, ничего подозрительного не нашел. Да и после её использования я проверял всю систему в автономном режиме, тоже ничего подозрительного не нашлось.
Начнем с простейшего. Перетащим, какой-нибудь элемент, запустим симулятор, введём значения на входы и посмотрим, что будет на выходе.
Запустите программу, выберите любой контроллер (я выбирал для своего Canny 3 tiny, но думаю это не принципиально)
Выберете элемент «Логическое умножение» и перетащите его на свободное пространство справа.
Нажмите один раз левой кнопкой мыши (ЛКМ) на зеленые квадратики и растяните линию для вывода (синюю) потом нажмите 2 раза ЛКМ, чтобы линия зафиксировалась. Проделайте так со всеми входами и выходами.
Нажмите на иконку в виде красного жука, после чего откроется симулятор
В режиме симуляции нажмите правой кнопкой мышки (ПКМ) на синие линии идущие ко входу, выберите опцию «Установить значение».
Обратите внимание, что ввести значение можно в разных форматах (символьном, бинарном, шестнадцатеричном), но мы выберем привычный нам десятеричный формат и введем любое значение.
Повторим туже самую операцию для второго входа, запустим симуляцию и посмотрим, что же получилось на выходе. Для запуска симуляции нажмите на кнопку в форме треугольника (как на картинке).
Как видим, на выходе вполне ожидаемо получается единица.
Можно построить и более сложную схему.
Обратите внимание, что если в данной схеме на вход «R» триггера подать «0», то триггер установится один раз и не будет сбрасываться при изменении значения на входе «S». Собственно, именно этого наглядного представления мне не хватало, пока я читал учебник. Именно поэтому я и решил написать для вас статью.
Давайте попробуем сделать пример со счетчиком и убедимся, что его показатели изменяются в режиме реального времени.
Мы используем детектор переднего фронта в паре со счетчиком. Детектор дает единичный импульс если сигнал на входе изменится, например, с «0» на «1».
Следующий импульс пойдет, когда мы обнулим сигнал на входе детектора, после чего снова подадим любое значение больше нуля
Ну и напоследок давайте разберем примеры с изменением представлением чисел в разных форматах записи. До этого мы вводили десятичные значения, но можем легко переключиться и в бинарный формат.
Блок конвертора позволяет число «10», представленное в двоичном формате, разложить на отдельные составляющие. На выходе значение «1» будет появляться только у соответствующего разряда числа.
Второй блок «Побитовое ИЛИ» — суммирует в бинарном формате два числа. Обратите внимание, что в случае, если у обоих чисел в каком-нибудь разряде значение «1» при суммировании единица не переноситься в следующий разряд.
Кстати, с помощью Wine среду разработки Cannylab, можно запустить и в ОС Linux. Эмулятор при этом вроде работает без сбоев.
Как я уже указал в начале статьи, Cannylab вряд ли предусматривался для обучения азам электроники (и информатики), поэтому набор элементов не так велик, как хотелось бы.
Наверняка есть какие-то opensource инструменты, выполняющие похожий функционал, но мне попался именно этот.
Программа бесплатная, мало весит, не требует установки, быстро загружается, а главное позволяет побаловаться с основными видами триггеров. Как раз то, что мне было нужно.
Возможно, Cannylab пригодиться небогатым учебных заведениям и кружкам энтузиастов, как платформа для организации лабораторных и практических занятий. Это всяко лучше, чем просто что-то чертить в тетрадке (как было в годы моей юности).
Пишем на Pascal для Android: Android Native Controls
Android и Java
APK-файлы
Приложения для Android могут распространяться в APK-файлах, которые являются zip-архивами. Таким образом, APK-файл можно открывать архиватором. Кроме того, можно и создавать APK-файл архиватором, но это уже сложнее, так как там требуется цифровая подпись, которую обычный архиватор делать не будет. Каким образом она формируется я не буду описывать потому, что не знаю, и потому, что создавать приложения для Android можно и не зная таких подробностей, так как подписанный файл можно создавать с помощью Eclipse ADT (Android Developer Tools). В этой статье будет описано как работать над Android-приложением используя две среды разработки, Eclipse и Lazarus, одновременно. Можно попробовать обойтись только лишь одним из этих двух, или даже обойтись совсем без среды разработки, но в статье будет, в основном, описан именно метод работы когда используются обе эти среды разработки. Когда вы соберёте свое приложение в APK, вы сможете скопировать его на телефон и установить. По умолчанию в Android запрещена установка приложений из APK (а разрешена без ограничений установка приложений из Google Play Market, он же Play Store), однако при попытке установить приложение из APK-файла Android должен сразу же предложить разрешить установку в настройках. Но на разных телефонах может быть по-разному. Возможно, некоторые производители блокируют установку приложений из APK более жёстко: например, включить настройку Android может и не предложить, тогда залезьте в стандартные настройки и найдите её там. А может такой настройки и не быть вообще. Можете заранее скачать из интернета какое-нибудь приложение в APK и попробовать установить его чтобы узнать, можно ли разрешить на вашем телефоне установку приложений из APK. Главное не накачать вирусов.
Все действия в данной статье описаны для Windows и делались мной на только что установленной системе Windows 8.1, 64-разрядной, в виртуальной машине. Кроме того, у меня были включены все администраторские права по умолчанию, и выключен UAC, то есть все действия у меня происходили сразу от имени администратора, так что, если у вас что либо не заработает, можете пытаться сделать то же самое «от администратора». Консоли тоже можно запускать от администратора.
Установка Java
Если у вас нет Java, то нужно установить Java. Заметьте что разрядность Eclipse и Java должна будет совпадать.
Заходим на java.com/ru и нажимаем большую красную кнопку «Загрузить Java бесплатно».
Java нужна той же разрядности, что и Eclipse, то есть, если загрузили 64-разрядный Eclipse ADT, то и Java должна быть 64-разрядная, иначе можно получить непонятную ошибку при старте Eclipse. Я устанавливаю 64-разрядную Java чтобы работал 64-разрядный Eclipse; для этого со страницы загрузки Java я перехожу по ссылке «Просмотрите все загружаемые файлы Java» и скачиваю там 64-разрядный установщик для Windows.
Установка Eclipse ADT
Итак, если у вас ещё нет Eclipse ADT, то следует скачать Eclipse ADT: developer.android.com/sdk. Скажу на всякий случай, что вообще все файлы и инструменты лучше скачивать с их официальных сайтов или с источников которым можно доверять.
(Те, у кого Eclipse ADT уже есть, могут этот шаг пропустить. )
Выбирать разрядность Eclipse ADT такую же, как разрядность установленной Java.
Загруженный архив распаковываем в любую папку, у меня это будет C:\PasAndroid
Android SDK Manager
Теперь посмотрим какие у нас SDK есть в Eclipse ADT. Для этого запускаем SDK Manager.exe из папки с Eclipse ADT. Если у вас есть установленная Java на компьютере, то он запустится. Иначе не запустится. В случае если SDK Manager не запустился (окно со списком пакетов не появляется) следует устанавливать Java.
Должен появиться список с пакетами для разработки. В случае если после установки Java не работает SDK Manager, можно попробовать перезагрузить Windows или иным способом донести до исполняемого файла изменившиеся переменные окружения, так как дело может быть в них.
Здесь вам предстоит выбрать начиная с какой версии Android будет работать ваше приложение. Я выбираю Android 4.0, а вы можете выбрать любую другую. Чем выше версия тем больше новых API доступно. На скриншоте есть пункт с названием ARM EABI v7a System Image. Если вы собираетесь запускать своё приложение только на телефоне, то отмечать его не обязательно. Это образ системы для эмулятора Android. Остальные пункты внутри Android 4.0 лучше устанавливать чем не устанавливать, особенно SDK Platform, без которой, скорее всего, работать не будет. Google APIs я думаю понятно зачем нужно. Когда выбрали пакеты для установки, нажимаем кнопку Install, затем нажимаем Accept License, затем нажимаем кнопку Продолжить. Ждём пока пакеты скачаются и установятся.
После успешной установки нужные пакеты должны отобразиться с состоянием Installed
Eclipse
Запускать Eclipse следует через исполняемый файл eclipse.exe: adt-bundle/eclipse/eclipse.exe. У меня это C:\PasAndroid\adt-bundle-windows-x86_64-20140702\eclipse\eclipse.exe
При запуске Eclipse спросит расположение Workspace-каталога. Я буду делать всё в папке C:\PasAndroid, поэтому я вписываю C:\PasAndroid\space
И вот у нас Eclipse, в котором нельзя перемещать кнопки. На этом будем считать что Eclipse ADT настроен.
fpcup
Теперь поговорим о настройке FreePascal и Lazarus. Настраивать их я буду с помощью программы fpcup потому, что это просто. В первую очередь скачиваем fpcup с со страницы автора на bitbucket: https://bitbucket.org/reiniero
Нажимаем Downloads. Какую разрядность выбирать для fpcup не важно, главное чтобы для Windows. На самом деле лучше выбирать 32-разрядный fpcup, как мне кажется, но детального исследования на эту тему я не проводил. Многое что касается Free Pascal лучше выбирать 32-разрядное, так как 64-разрядное может не всегда работать как нужно (относится это замечание к Windows. На Linux всё наоборот: на 64-разрядный Линукс нужно 64-разрядное всё. Вообще всё). Я скачиваю fpcup в папку C:\PasAndroid\fpcup.
Теперь создаём BAT-скрипт для вызова fpcup с нужными параметрами. Вот код:
Нужно чтобы весь текст после fpcup был в одну строку. Скрипт нужно сохранить в папку с fpcup. У меня это будет файл C:\PasAndroid\fpcup\up.bat.
В параметр fpcURL надо назначать trunk так как поддержка Android реализована, в первую очередь, в разрабатываемой ветви компилятора, которая не добралась до релиза. В параметр lazURL нужно назначать trunk так как Lazarus-trunk работает лучше с FreePascal-trunk, а вот в стабильном лазарусе имеются проблемы с FreePascal-trunk, которые я имел счастье лично наблюдать не так давно. В общем, наверное, не ошибусь, если скажу что следует применять следующее правило: стабильный Lazarus использовать с стабильным FreePascal, а нестабильный Lazarus использовать с нестабильным FreePascal. Параметр anchordocking=1 нужен для того, чтобы установился лазарус-пакет для стыковки окон. Этот параметр можно не вписывать.
Открываем консоль Windows cmd.exe либо другую любую консоль для Windows и переходим в папку fpcup. У меня это C:\PasAndroid\fpcup. Надеюсь что объяснять как пользоваться консолью не нужно. Следует запустить скрипт для установки Free Pascal и Lazarus. Вначале у нас будет устанавливаться FreePascal и Lazarus для Windows так как он (лазарус) всё равно нужен. Набираем имя файла со скриптом, у меня это up.bat. Нажимаем Enter. Запустится fpcup, выведет параметры, спросит продолжить или нет, вводим Y, нажимаем Enter, ждём.
Ждать, скорее всего, придётся долго. Не следует прерывать процесс досрочно, так как я вас предупредил, что он может занять много времени. Если процесс завершился быстро, то, скорее всего, произошла ошибка. В этом случае читаем сообщение об ошибке и пытаемся поправить ситуацию. В случае успеха должен в конце появиться текст наподобие такого:
Однако, появляется такой текст и в случае если произошла ошибка, так что смотреть что пишется нужно всё равно.
У меня лично в fpcup в какой-то момент отказался скачиваться subversion. Опишу как с этим бороться на всякий случай. Появляется вот такой вот текст:
Здесь fpcup сообщает нам, что не может скачать Subversion. В таком случае можно перейти по выделенной ссылке самому через браузер и скачать архив. В архиве будет две папки: Bin и License. Содержимое папки Bin следует распаковать в папку BU/svn, которая у меня C:\PasAndroid\FP\BU\svn, а у вас она будет находиться в той же подпапке, но там, куда вы указали устанавливать FreePascal и Lazarus на первой строке в bat-скрипте. Будет у вас скачиваться svn-клиент автоматически или же нет я не знаю, так как у меня он вначале скачивался, а на следующей неделе уже нет; на той же машине с теми же настройками и папками. Скачивать Subversion отдельно нужно только если автоматическая загрузка не сработала, и вы получили «ERROR downloading SVN client».
Теперь на рабочем столе у вас должен появиться ярлык «Lazarus 1.3». Возможно, версия Lazarus с момента написания статьи несколько изменится, но ветка 1.3 должна быть доступна ещё долго. Не забываем проверить, работает ли Lazarus, если конечно он вам нужен. У кого Lazarus уже есть, тот может установку лазаруса пропустить и работать со своим лазарусом. Имейте в виду, что стандартный лазарус не имеет функции для быстрого автоматического переключения между несколькими компиляторами, так что, если ваш лазарус настроен на стабильный FreePascal 2.6.5 (в отличие от trunk он же 2.7.1), то, возможно, удобнее иметь для работы с trunk-компилятором отдельный лазарус. Кроме того, как я уже сказал, с нестабильным компилятором лучше работает нестабильный Лазарус. Если решите использовать дургой лазарус, то нужно вписать в настройках лазаруса правильные пути к компилятору.
Теперь нужно установить компилятор FreePascal для Android. Специальный Lazarus для Android не нужен.
Вначале нужно установить Android NDK (native development kit). Скачивать с официального сайта: developer.android.com/tools/sdk/ndk. Я скачиваю новейший доступный сегодня NDK r10c для 64-разрядной Windows. Скачается исполняемый файл который при запуске разархивируется в подпапку той же папки в которой его запустили. Я запускаю файл в папке C:\PasAndroid. Ждём пока распакуются кучи файлов.
Обратите внимание на android-14 в пути к папке lib выше. Так как в начале я написал, что буду настраивать инструменты так, чтобы поддерживался Android начиная с 4.0, то я выбираю android-14 так как API level 14 соответствует Android 4.0. Соответствие API level и определённой версии Android можно посмотреть в статье Android Version History в википедии: en.wikipedia.org/wiki/Android_version_history. Конечно же, всегда есть риск что что-нибудь «не заведётся» из-за несоответствия версий чего-нибудь с чем-нибудь. К примеру, то что работало в NDK r9c может по каким либо причинам не сработать с NDK r10c.
Теперь создаём ещё один BAT-скрипт для запуска программы fpcup для подготовки компилятора FreePascal который будет компилировать динамические библиотеки для Android. Я сохраняю код в файл andro.bat в папке с исполняемым файлом fpcup. Вот код:
Не забывайте что C:\PasAndroid\FP нужно поменять на свой путь. Но путь должен быть тот же самый, что и в предыдущем скрипте потому, что кросскомпилятор FreePascal для Android установится в ту же самую папку, что и FreePascal для Windows. Запускаем скрипт, Y, ждём. Ждать придётся не так долго как в прошлый раз потому, что не будет происходить закачивание утилит, закачивание исходного кода и сборка лазаруса. Будет происходить только лишь сборка FreePascal. Обратите внимание на параметр crossopt, здесь я устанавливаю минимальный поддерживаемый процессор ARM v5 без требований дополнительных инструкций для вычислений с плавающей запятой. Это, возможно, позволит коду работать на разных более старых устройствах, вообще же я бы рекомендовал ставить ARM v6 так как практически все современные телефоны имеют процессор не ниже v6.
Настройка Android Native Controls
Теперь переходим к рассмотрению библиотеки Android Native Controls, сделанной неким Simon, Choi. Вот ссылка на его блог: blog.naver.com/simonsayz. Так вот, Android Native Controls это такая вещь, которая в некотором роде позволяет создавать приложения для Android на FreePascal не зная Java, так как этот товарищ создал некое подобие фрэймворка, которое взаимодействует с Android API на Java. Вот ссылка на новейший на данный момент Android Native Controls: blog.naver.com/simonsayz/120204060881. В его проекте я сделал некоторые изменения.
1. Во-первых, пришлось переложить исходники на Java в другую подпапку чтобы пакеты, прописанные в исходниках, соответствовали папке. App.java и Controls.java должны быть в src/com/kredix, а не в src. Иначе не компилируется.
2. Во-вторых, я удалил в Lazarus-проекте все дополнительные опции компилятора вписанные в Project Options\Compiler Options\Other\Custom Options.
4. Из файла AndroidManifest.xml я убрал android:debuggable = «true», иначе не компилируется.
5. Выключил оптимизацию.
При разработке приложения для Android вам придётся держать открытым Lazarus и Eclipse. Я делал именно так. В случае использования базовой функциональности Android Native Controls или другого готового фреймворка редактировать код в Eclipse не придётся, в таком случае будете использовать Eclipse только для запуска приложения на телефоне, просмотра логов и создания APK-файлов.
Нужно поставить галочку «Copy projects into workspace». Проект импортируется под именем App.
Обратите внимание на панель Compiler Options / Config and Target.
Компиляция проекта
В случае если проект у вас не компилируется придётся думать что не так.
Обратите внимание: у меня внизу 0 errors, значит можно запускать.
Запуск проекта
Есть два способа запуска проекта: прямо из Eclipse либо собрать APK-файл и установить его на телефоне. Обратите внимание на замечание по поводу APK-файлов в начале статьи. А вот чтобы запускать проект прямо из Eclipse, нужно установить для своего телефона драйвер ADB на компьютере и включить отладку по USB в настройках телефона (в настройках в разделе Для разработчиков).
Нажимаем Finish, ждём, готово. Я сохраняю APK-файл на рабочий стол. Теперь нужно скопировать его на телефон, установить и запустить. Проделывать это каждый раз может надоесть.
Если ваш телефон там появился, значит всё, можно запускать, иначе искать драйвер для телефона. При запуске могут попросить удалить уже установленное приложение если вы до этого уже установили своё приложение через APK-файл. Это нормально, потому что подписи приложения в APK файле и во временном файле приложения сгенерированном через Eclipse могут не совпадать. Если спрашивают лог, выбираем Yes, Verbose.
После этого можем наблюдать отладочные сообщения от приложения.
Хочу заметить что у тех, кто будет пользоваться моим архивом, некоторые запросы, скорее всего, не будут появляться, так как запомнится то что я выбирал.
Запускать приложения «быстрым» способом лучше по двум причинам: во-первых, это быстрее. Если выбрать чтобы не спрашивали каждый раз на каком телефоне запускать, то для запуска нужно будет делать только одно нажатие кнопки. Во-вторых, отображается лог.
При желании можно изобрести другой, какой-нибудь нестандартный способ загрузки APK-файла на телефон, автоматизированной установки APK-файла и получения лога во время работы приложения.
Проект AndControls в действии:
Скриншоты сделал на своём телефоне.
Использование Android Native Controls
Как я написал выше, используя Android Native Controls, вы можете попробовать создать Android-приложение, не трогая его Java-часть совсем.
Как создать своё приложение с Android Native Controls? У нас есть проект, но сейчас он показывает какие-то демонстрационные экраны, фотографии, и прочее то, что нам не нужно. В первую очередь я бы рекомендовал сохранить существующий проект в его неизменном виде для его последующего использования в качестве шаблона. Таким образом у вас будет проект с нужной структурой каталогов, настройками и файлами, который можно будет просто скопировать когда понадобится создать ещё один проект. После того как скопировали проект, изменяйте его чтобы выполнять нужные вам действия. Обратите внимание на фрагмент кода:
Здесь создаётся окно которое будет показано при запуске приложения. Создайте новый модуль и начните работать над своим собственным окном, а в код Java_Event_pAppOnCreate подправьте так, чтобы он создавал экземпляр класса вашего окна вместо jFrom_Splash. Все остальные файлы-окна можно удалить. При работе используйте проект-шаблон в качестве справочника. Смотрите как делаются те или иные вещи, создаются визуальные элементы управления, кнопки, поля ввода и прочее.
Кратко про использование Java Native Interface для взаимодействия кода на Java и FreePascal
Взаимодействие кода на Java и FreePascal в деталях это тема для отдельной статьи. Поэтому сейчас поверхностно поизучаем взаимодействие по JNI (Java Native Interface) на примере проекта AndControls.
Это фрагмент кода из файла win64_ArmV6_VFPv2.pas:
Для того, чтобы некоторые функции исполняемого модуля написанного на FreePascal стали доступны из Java, нужно объявить их в секции exports library-файла. Здесь они только экспортируются, а объявлены функции могут быть в любом модуле.
Обратите внимание на объявление экспортируемых функций:
Для того чтобы экспортируемые функции корректно вызывались из Java, они должны быть объявлены с директивой cdecl; Заметьте, что начинаться код главного файла проекта на FreePascal должен с ключевого слова library, а не program. Это нужно для того чтобы компилировалась динамическая библиотека.
Когда Java-машина загружает динамическую библиотеку, то вызывается функция JNI_OnLoad, а перед тем как выгрузить динамическую библиотеку, вызывает функцию JNI_OnUnload. Лучше разрабатывать приложение так чтобы оно было готово завершить работу в любой момент по требованию системы так как Android может заставить приложение завершаться когда угодно. Если приложение должно работать постоянно длительное время, то следует сделать его сервисом или создать непропадающее уведомление (notification), об этом читаем в документации по Android API.
Для вызова Java-методов из кода на FreePascal с помощью JNI нужно использовать специальный API:
Здесь из кода написанного на FreePascal вызывается Java-метод getStrLength (не знаю зачем). Всё не так просто. Но если разобраться, то просто. Непредвиденные сложности могут ожидать тех, кто захочет организовать взаимодействие по JNI между разными потоками приложения.
А вот фрагмент кода на Java, который объявляет наличие некоторых функций в динамической библиотеке:
Этот фрагмент тоже взят из проекта Android Native Controls. Как видно, функции, которые должны браться из динамической библиотеки, объявляются с ключевым словом native. Кроме того заметьте, что перед тем как начать вызывать native-функции, в Java-коде должна быть вызвана функция loadLibrary:
Unload делать не надо; Java-машина должна выгрузить динамическую библиотеку сама.
Вызываются native-функции просто как обычные функции; основные сложности реализации сосредоточены на native-стороне.
Организовать взаимодействие между частями программы по JNI можно по-разному. Вместо того чтобы экспортировать каждую нужную функцию, можно попробовать сделать общей одну единственную функцию (не считая JNI_OnLoad и JNI_OnUnLoad) и передавать через неё сообщения в виде XML-строк. Это избавит от необходимости более глубоко разбираться в JNI и от возможных проблем с многопоточностью. Если бы лично мне пришлось работать с JNI, я бы, скорее всего, выбрал бы именно такой подход.
Фреймворки
Скажу на всякий случай что могу в чём-то ошибаться так как особо не разбирался и не работал с этими библиотеками. Думаю не ошибусь если скажу что все они они в разной степени удобны или неудобны, а так же предоставляют более или менее полный доступ к API системы Android. Разные фреймворки обеспечивают разную производительность написанных на них приложений. По крайней мере, по части производительности можно с довольно большой уверенностью сказать, что Free Pascal не плох, хотя глубоких тестов не проводил.
Какие возможности предоставляют LCL for Android и Android Module Wizard я не знаю так как никогда не пользовался ими. Для приложений с GUI будет не плох Android Native Controls либо LCL for Android, либо JNI вручную. Для приложений-игр будет не плох ZenGL. Для работы с сетью пригодится библиотека Synapse. Не берусь сказать, в какой степени готовности находится сейчас LCL for Android.
Впрочем, справедливости ради отмечу, что Android Module Wizard выглядит солидно, и в состоянии разработки он находится уже больше года. Если возникают вопросы по поводу Android Module Wizard, заходим на forum.lazarus.freepascal.org и задаём свой вопрос в теме с Android Module Wizard на английском.
В качестве работающей на андроиде библиотеки можно привести Synapse.
Архив с настроенными инструментами
Заключение
И вот таким вот примерно образом можно делать приложения на FreePascal для Android.
Если что-то не получается или что-то не понятно, ищем ответы в Google, кроме того, можно попробовать создать тему с вопросом касающемся Android-разработки на форуме freepascal.ru, и если я увижу ваш вопрос, то постараюсь на него ответить.
Скачать архив с программами 1.27 Gb (проверялось только на x64)