lazarus приложение для android

Android/ru

50px Android robot.svg

Эта статья относится только к Android.

Андроид это операционная система основанная на модифицированном ядре Linux, а так же имеющая собственную виртуальную машин Dalvick, основанную на Java. Free Pascal даёт возможность разрабатывать программы для Андроид как нативные (для определённого вида процессора на котором работает операционная система), так и для виртуальной машины.

Contents

Компоненты

Большинство функционала Андроид системы, доступны через Java компоненты. FreePascal поддерживает компиляцию в Javacode. Для разработки таки приложений требуется установить Android SDK.

Некоторым приложениям, достаточно использовать только фунционал доступный через нативные Андроид (например игры). Для разработки таких приложений требуется установить Android NDK. Но для интеграции с графической средой системы придётся так же установить и Android SDK. Так же потребуется кросс-компилятор для нативной Андроид системы.

Lazarus

Для Lazarus доступен ряд компонентов, для разработки графический приложений под Андроид:

Андроид среда

Версии Системы, SDK, NDK

Новые версии системы Андройд выходят регулярно. Так же обновляются версии SDK и NDK, так же известный как API версия. Нумерация идёт паралельно, но при выпуске новой версии Андрой системы, обычно увеличивается номер API версии. При обновлении подверсии системы Андроид, API версия может не поменяться.

Например, Android 5.x, использовал несколько номеров API версий 21 и 22 Тогда как, Android 6.x, использовал только одну API версию: 23

Необходимо различать номер системы и номер API.

Подробнее можно прочитать в истории версий Андроида

Загрузка Приложений

Есть несколько способов загрузить приложения на Андроид:

Кросс-компилятор

Андройд платформы

Поддержка Андройд платформы официально добавлена начиная с версии FPC 3.0.

ARM64 (CPU_TARGET=aarch64) (на лето 2016, доступен только в trunk)

JVM (не рассматривается на этой странице)

Android NDK

Независимо от того, устанавливаете ли вы FPC из официального дистрибутива, или компилируете из исходников, вам необходимо установить Android NDK. NDK требуется для сборки кросс-компилятора, а также RTL и FCL библиотек.

После чего распакуйте в любую директорию.

Установка из дистрибутива

Начиная с версии FPC 3.0, компилятор распространяется с подготовленным кросс-компилятором и подготовленными RTL и FCL пакетами для Win32 системы.

1. Скачайте дистрибутив с офицаильной Sourceforge странички проекта

2. Во время установки, дистрибутив потребует указать папку, в которой распакован NDK

ndk install

Указанный путь будет использован для обновления конфигурационного файла, чтобы указать на андройд инструментарий

3. Дистрибутив кросс-комплиятора можно устанавливать поверх ранее установленных дистрибутивов FPC (например win32, win32-arm, win32-win64).

Сборка кросскомпилятора из исходников

Получите последнюю версию исходников

Получите последнюю версию исходников из SVN репозитория.

Это можно сделать с помощью следующей командной строки

Процесс загрузки исходников может занять некоторое время. По-завершению исходники будут находится в директории «fpcsrc».

Сборка кросс-компилятора

Сборка кросс-компилтяора для i386-android, mips-android происходит по аналогичной схеме.

Предположим, что используются следующие директории (папки)

1. Добавьте в переменную-среды PATH пусть, где находится инструментарий из NDK. Для данного примера, это:

C:\Program Files\Android SDK\android-ndk-r8d\toolchains\arm-linux-androideabi-4.7\prebuilt\windows\bin

2.1 Откройте командную строку и перейдите в папку с исходниками fpc:

2.2 Запустите следующую команду:

Например, если нужно собрать с поддержкой аппаратного FPU и поддержкой инструкций ARMv7a, следует использовать следующу команду:

Начиная с Android-21 доступены 64-битные архитектуры. Конфиуграционный файл для них будет выглядеть следующим образом.

(arm64 именеются как aarch64 в FPC)

Компиляция под Андройд

Убедитесь в том, что у вас есть настроенный кросс-компилятор.

Программу под Андрой нужно скомпилировать следующим образом (при том, что кросс-компилятор установлен в C:\Develop\FPC\pp)

Общие Сведения

(Android не является полностью Linux-совместимой системой, например некоторые syscalls вызовы и стандртные функции, такие как pthreads отсуствтуют вовсе. Система так же ведёт себя иначе в некоторых случаях, чем Линукс, и количество различий продолжает расти. Чтобы избежать директив условной компиляции, if defined(linux) and not defined(android), используется комбинация UNIX + Android.

Источник

Android tutorial

50px Android robot.svg

This article applies to Android only.

Contents

Windows

This is a quick tutorial on how to create android apps with Lazarus.

In this tutorial assume used versions JDK 1.6u45 + SDK 22.2.1 + ndk-r9 + Laz4Android1.1-41139-FPC2.7.1

Prepare folder

Create on C:\ a folder called «Android»

Install JDK

It will be installed in to C:\Program Files\Java\.

Install SDK

DOWNLOAD FOR OTHER PLATFORMS > SDK Tools Only

Install sdk (installer_r22.2.1-windows) into C:\Android\android-sdk

Copy at «C:\Android\android-sdk\tools» the file «apkbuilder.bat» (can be found here

Now update the SDK [WIN START > SDK Manager ]

add android 4.0 (API 14)

add android 2.2 (API 8]

Install NDK

Download only the file android-ndk-r9-windows-x86.zip

Unzip android-ndk-r9-windows-x86.zip into C:\Android\android-ndk-r9

Install Laz4Android

New version can download from here:[1]

Unzip Laz4Android1.1-41139-FPC2.7.1.7z into C:\Android\laz4android

Edit the file C:\Android\laz4android\build.bat like this :

Rebuild Laz4Android IDE

select «Package» «Install/Uninstall Packages»

Compile the demo «androidlcl»

Copy C:\Android\laz4android\examples\androidlcl at C:\Android\Projects\androidlcl

File > open «C:\Android\Projects\androidlcl\androidlcltest.lpr»

Project > project options

Compiler options > select «Release TAndroid»

Target file name : android\libs\armeabi\liblclapp.so

Ide macro values : macro name : LCLWidgetType macro value : customdrawn

Now Run > Compile this will generate this library : C:\Android\Projects\androidlcl\android\libs\armeabi\liblclapp.so [5.073 kb]

Deployment

Modify the first 6 lines like this :

Use as password : «senhas»

This will produce the file :

Modify the first 6 lines like this :

I had to change mine to this on sdk version 22:

run «build_debug_apk.bat» answer at the questions and give the password «senhas» when asked

This will generate

C:\Android\Projects\androidlcl\android\bin\lcltest.apk [1.549 kb]

START > AVD Manager

New > AVD name > give a name

Target Android 4 API 14

Once created select the virtual device and hit «start» > «Launch» wait a couple of minutes.

Edit with a text editor the file

By running this you will get a debug file here :

Links

Linux

Note: Work in progress.

This is a quick tutorial on how to create android apps with Lazarus.

In this tutorial assume used versions are Ubuntu 13.10, OpenJDK 1.7.0_51, SDK 22.2.1, ndk-r9, Laz4Android1.1-41139-FPC2.7.1

Prepare folder

Install OpenJDK

Install SDK

DOWNLOAD FOR OTHER PLATFORMS > SDK Tools Only

Now update the SDK (Start

add android 4.0 (API 14)

add android 2.2 (API 8]

Install NDK

Download only the file android-ndk-r9d-linux-x86.tar.bz2

Extract android-ndk-r9d-linux-x86.tar.bz2 into

Build FPC 2.7.1

Install latest FPC distribution package:

Download latest FPC trunk from SVN:

Build FPC trunk for ARM to

Rebuild Lazarus IDE

select «Package» «Install/Uninstall Packages»

Источник

Пишем на 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. Скажу на всякий случай, что вообще все файлы и инструменты лучше скачивать с их официальных сайтов или с источников которым можно доверять.

ADT PLZ

(Те, у кого Eclipse ADT уже есть, могут этот шаг пропустить. )

Выбирать разрядность Eclipse ADT такую же, как разрядность установленной Java.

Загруженный архив распаковываем в любую папку, у меня это будет C:\PasAndroid

ADT unpack

Android SDK Manager

Теперь посмотрим какие у нас SDK есть в Eclipse ADT. Для этого запускаем SDK Manager.exe из папки с Eclipse ADT. Если у вас есть установленная Java на компьютере, то он запустится. Иначе не запустится. В случае если SDK Manager не запустился (окно со списком пакетов не появляется) следует устанавливать Java.

SDK Manager indae

Должен появиться список с пакетами для разработки. В случае если после установки Java не работает SDK Manager, можно попробовать перезагрузить Windows или иным способом донести до исполняемого файла изменившиеся переменные окружения, так как дело может быть в них.

SDK Manager

Здесь вам предстоит выбрать начиная с какой версии Android будет работать ваше приложение. Я выбираю Android 4.0, а вы можете выбрать любую другую. Чем выше версия тем больше новых API доступно. На скриншоте есть пункт с названием ARM EABI v7a System Image. Если вы собираетесь запускать своё приложение только на телефоне, то отмечать его не обязательно. Это образ системы для эмулятора Android. Остальные пункты внутри Android 4.0 лучше устанавливать чем не устанавливать, особенно SDK Platform, без которой, скорее всего, работать не будет. Google APIs я думаю понятно зачем нужно. Когда выбрали пакеты для установки, нажимаем кнопку Install, затем нажимаем Accept License, затем нажимаем кнопку Продолжить. Ждём пока пакеты скачаются и установятся.

SDK InProgress

После успешной установки нужные пакеты должны отобразиться с состоянием Installed

SDK Installed

Eclipse

Запускать Eclipse следует через исполняемый файл eclipse.exe: adt-bundle/eclipse/eclipse.exe. У меня это C:\PasAndroid\adt-bundle-windows-x86_64-20140702\eclipse\eclipse.exe

Eclipse ch ws

При запуске Eclipse спросит расположение Workspace-каталога. Я буду делать всё в папке C:\PasAndroid, поэтому я вписываю C:\PasAndroid\space

Eclipse blank

И вот у нас Eclipse, в котором нельзя перемещать кнопки. На этом будем считать что Eclipse ADT настроен.

fpcup

Теперь поговорим о настройке FreePascal и Lazarus. Настраивать их я буду с помощью программы fpcup потому, что это просто. В первую очередь скачиваем fpcup с со страницы автора на bitbucket: https://bitbucket.org/reiniero

fpcup dl

Нажимаем 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 go

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

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

У меня лично в fpcup в какой-то момент отказался скачиваться subversion. Опишу как с этим бороться на всякий случай. Появляется вот такой вот текст:

fpcup nosvn

Здесь 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-компилятором отдельный лазарус. Кроме того, как я уже сказал, с нестабильным компилятором лучше работает нестабильный Лазарус. Если решите использовать дургой лазарус, то нужно вписать в настройках лазаруса правильные пути к компилятору.

lazarus

Теперь нужно установить компилятор 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-файлов.

Eclipse import

Нужно поставить галочку «Copy projects into workspace». Проект импортируется под именем App.

lazarus andc

lazarus andc paths

Обратите внимание на панель Compiler Options / Config and Target.

lazarus andc target

Компиляция проекта

lazarus build success

В случае если проект у вас не компилируется придётся думать что не так.

eclipse build succ

Обратите внимание: у меня внизу 0 errors, значит можно запускать.

Запуск проекта

Есть два способа запуска проекта: прямо из Eclipse либо собрать APK-файл и установить его на телефоне. Обратите внимание на замечание по поводу APK-файлов в начале статьи. А вот чтобы запускать проект прямо из Eclipse, нужно установить для своего телефона драйвер ADB на компьютере и включить отладку по USB в настройках телефона (в настройках в разделе Для разработчиков).

Нажимаем Finish, ждём, готово. Я сохраняю APK-файл на рабочий стол. Теперь нужно скопировать его на телефон, установить и запустить. Проделывать это каждый раз может надоесть.

eclipse chooseph

Если ваш телефон там появился, значит всё, можно запускать, иначе искать драйвер для телефона. При запуске могут попросить удалить уже установленное приложение если вы до этого уже установили своё приложение через APK-файл. Это нормально, потому что подписи приложения в APK файле и во временном файле приложения сгенерированном через Eclipse могут не совпадать. Если спрашивают лог, выбираем Yes, Verbose.

eclipse logask

После этого можем наблюдать отладочные сообщения от приложения.

eclipse log

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

Запускать приложения «быстрым» способом лучше по двум причинам: во-первых, это быстрее. Если выбрать чтобы не спрашивали каждый раз на каком телефоне запускать, то для запуска нужно будет делать только одно нажатие кнопки. Во-вторых, отображается лог.

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

Проект AndControls в действии:

action 1

action 2

Скриншоты сделал на своём телефоне.

Использование Android Native Controls

Как я написал выше, используя Android Native Controls, вы можете попробовать создать Android-приложение, не трогая его Java-часть совсем.

Как создать своё приложение с Android Native Controls? У нас есть проект, но сейчас он показывает какие-то демонстрационные экраны, фотографии, и прочее то, что нам не нужно. В первую очередь я бы рекомендовал сохранить существующий проект в его неизменном виде для его последующего использования в качестве шаблона. Таким образом у вас будет проект с нужной структурой каталогов, настройками и файлами, который можно будет просто скопировать когда понадобится создать ещё один проект. После того как скопировали проект, изменяйте его чтобы выполнять нужные вам действия. Обратите внимание на фрагмент кода:

createform

Здесь создаётся окно которое будет показано при запуске приложения. Создайте новый модуль и начните работать над своим собственным окном, а в код Java_Event_pAppOnCreate подправьте так, чтобы он создавал экземпляр класса вашего окна вместо jFrom_Splash. Все остальные файлы-окна можно удалить. При работе используйте проект-шаблон в качестве справочника. Смотрите как делаются те или иные вещи, создаются визуальные элементы управления, кнопки, поля ввода и прочее.

Кратко про использование Java Native Interface для взаимодействия кода на Java и FreePascal

Взаимодействие кода на Java и FreePascal в деталях это тема для отдельной статьи. Поэтому сейчас поверхностно поизучаем взаимодействие по JNI (Java Native Interface) на примере проекта AndControls.

Это фрагмент кода из файла win64_ArmV6_VFPv2.pas:

AC JNI

Для того, чтобы некоторые функции исполняемого модуля написанного на FreePascal стали доступны из Java, нужно объявить их в секции exports library-файла. Здесь они только экспортируются, а объявлены функции могут быть в любом модуле.

Обратите внимание на объявление экспортируемых функций:

CDECL JNI

Для того чтобы экспортируемые функции корректно вызывались из Java, они должны быть объявлены с директивой cdecl; Заметьте, что начинаться код главного файла проекта на FreePascal должен с ключевого слова library, а не program. Это нужно для того чтобы компилировалась динамическая библиотека.

Когда Java-машина загружает динамическую библиотеку, то вызывается функция JNI_OnLoad, а перед тем как выгрузить динамическую библиотеку, вызывает функцию JNI_OnUnload. Лучше разрабатывать приложение так чтобы оно было готово завершить работу в любой момент по требованию системы так как Android может заставить приложение завершаться когда угодно. Если приложение должно работать постоянно длительное время, то следует сделать его сервисом или создать непропадающее уведомление (notification), об этом читаем в документации по Android API.

Для вызова Java-методов из кода на FreePascal с помощью JNI нужно использовать специальный API:

jni complications

Здесь из кода написанного на FreePascal вызывается Java-метод getStrLength (не знаю зачем). Всё не так просто. Но если разобраться, то просто. Непредвиденные сложности могут ожидать тех, кто захочет организовать взаимодействие по JNI между разными потоками приложения.

А вот фрагмент кода на Java, который объявляет наличие некоторых функций в динамической библиотеке:

jni java

Этот фрагмент тоже взят из проекта Android Native Controls. Как видно, функции, которые должны браться из динамической библиотеки, объявляются с ключевым словом native. Кроме того заметьте, что перед тем как начать вызывать native-функции, в Java-коде должна быть вызвана функция loadLibrary:

jni 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.

Архив с настроенными инструментами

lazarus sdk paths

Заключение

И вот таким вот примерно образом можно делать приложения на FreePascal для Android.

Если что-то не получается или что-то не понятно, ищем ответы в Google, кроме того, можно попробовать создать тему с вопросом касающемся Android-разработки на форуме freepascal.ru, и если я увижу ваш вопрос, то постараюсь на него ответить.

Скачать архив с программами 1.27 Gb (проверялось только на x64)

Источник

Понравилась статья? Поделить с друзьями:
Добавить комментарий
  • Как сделать успешный бизнес на ритуальных услугах
  • Выездной кейтеринг в России
  • Риски бизнеса: без чего не обойтись на пути к успеху
  • lazarus приложение без окна
  • lazarus параметры запуска приложения