Sign in Join
Wiki copytemporary

Android/ru: what changed

Revision 3 to 4. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11*(Android only)*
22
33Андроид это операционная система основанная на модифицированном ядре Linux, а так же имеющая собственную виртуальную машин Dalvick, основанную на Java. Free Pascal даёт возможность разрабатывать программы для Андроид как нативные (для определённого вида процессора на котором работает операционная система), так и для виртуальной машины.
44
55## Компоненты
66
77Большинство функционала Андроид системы, доступны через Java компоненты. FreePascal поддерживает компиляцию в Javacode. Для разработки таки приложений требуется установить Android SDK.
88
99- [[FPC JVM Android Development]]
1010- [[Android4Pascal]] - набор Java интерфейсов для GUI компонентов
1111
1212Некоторым приложениям, достаточно использовать только фунционал доступный через нативные Андроид (например игры). Для разработки таких приложений требуется установить Android NDK. Но для интеграции с графической средой системы придётся так же установить и Android SDK. Так же потребуется кросс-компилятор для нативной Андроид системы.
1313
1414### Lazarus
1515
1616Для Lazarus доступен ряд компонентов, для разработки графический приложений под Андроид:
1717
1818- [laz4android](https://sourceforge.net/projects/laz4android/) - сборка лазаруса с необходимыми пакетами и FPC, подготовленными к сборке. Только Windows.
1919- [[LAMW]] - Lazarus Android Mobile Wizard. Разрабатывается под сборку laz4android (может быть установлен на "обычный" Лазарус, при наличии необходимых компонентов)
2020- [[Custom Drawn Interface/Android]] - набор графических интерфейсов основанный на нативном Андройде. Маскисмально совместим с LCL.
2121- [[LazToApk/ru|LazToApk]]
2222
2323## Андроид среда
2424
2525### Версии Системы, SDK, NDK
2626
2727Новые версии системы Андройд выходят регулярно. Так же обновляются версии SDK и NDK, так же известный как API версия. Нумерация идёт паралельно, но при выпуске новой версии Андрой системы, обычно увеличивается номер API версии. При обновлении подверсии системы Андроид, API версия может не поменяться.
2828
2929Например, Android 5.x, использовал несколько номеров API версий 21 и 22 Тогда как, Android 6.x, использовал только одну API версию: 23
3030
3131Необходимо различать номер системы и номер API.
3232
3333Подробнее можно прочитать в [истории версий Андроида](https://developer.android.com/about/dashboards/index.html)
3434
3535### Загрузка Приложений
3636
3737Есть несколько способов загрузить приложения на Андроид:
3838
3939- используя APK (Application Package File)
4040- вручную, например через SSH. Но такие приложения будут иметь крайне ограниченный функционал.
4141
4242## Кросс-компилятор
4343
4444### Андройд платформы
4545
4646Поддержка Андройд платформы официально добавлена начиная с версии FPC 3.0.
4747
4848Поддерживаемые CPU:
4949
5050ARM (CPU_TARGET=arm)
5151
5252x86 (CPU_TARGET=i386)
5353
5454MIPS (CPU_TARGET=mipsel)
5555
5656ARM64 (CPU_TARGET=aarch64) (на лето 2016, доступен только в trunk)
5757
5858[[FPC JVM/ru|JVM]] (не рассматривается на этой странице)
5959
6060### Android NDK
6161
6262Независимо от того, устанавливаете ли вы FPC из официального дистрибутива, или компилируете из исходников, вам необходимо установить Android NDK. NDK требуется для сборки кросс-компилятора, а также RTL и FCL библиотек.
6363
6464Скачайте NDK с этого сайта: <http://developer.android.com/tools/sdk/ndk/index.html>
6565
6666После чего распакуйте в любую директорию.
6767
6868### Установка из дистрибутива
6969
7070Начиная с версии FPC 3.0, компилятор распространяется с подготовленным кросс-компилятором и подготовленными RTL и FCL пакетами для Win32 системы.
7171
72721\. Скачайте дистрибутив с офицаильной [Sourceforge странички проекта](https://sourceforge.net/projects/freepascal/files/Win32)
7373
74742\. Во время установки, дистрибутив потребует указать папку, в которой распакован NDK
7575
7676![](/wiki-images/4/4a/Ndk_install.png)
7777
7878Указанный путь будет использован для обновления конфигурационного файла, чтобы указать на андройд инструментарий
7979
8080``` pascal
8181# --- Android NDK config begin ---
8282
8383#ifdef android
8484 #ifdef cpuarm
8585 -FlC:\ndk\android-ndk-r11c\platforms\android-9\arch-arm\usr\lib
8686 -FDC:\ndk\android-ndk-r11c\toolchains\arm-linux-androideabi-4.9\prebuilt\windows\bin
8787 #endif
8888 #ifdef cpu386
8989 -FlC:\ndk\android-ndk-r11c\platforms\android-9\arch-x86\usr\lib
9090 -FDC:\ndk\android-ndk-r11c\toolchains\x86-4.9\prebuilt\windows\bin
9191 #endif
9292 #ifdef cpumips32
9393 -FlC:\ndk\android-ndk-r11c\platforms\android-9\arch-mips\usr\lib
9494 -FDC:\ndk\android-ndk-r11c\toolchains\mipsel-linux-android-4.9\prebuilt\windows\bin
9595 #endif
9696#endif
9797
9898# --- Android NDK config end ---
9999```
100100
1011013\. Дистрибутив кросс-комплиятора можно устанавливать поверх ранее установленных дистрибутивов FPC (например win32, win32-arm, win32-win64).
102102
103103### Сборка кросскомпилятора из исходников
104104
105105#### Получите последнюю версию исходников
106106
107107Получите последнюю версию исходников из SVN репозитория.
108108
109109Это можно сделать с помощью следующей командной строки
110110
111111``` bash
112112svn co http://svn.freepascal.org/svn/fpc/trunk fpcsrc
113113```
114114
115115Процесс загрузки исходников может занять некоторое время. По-завершению исходники будут находится в директории "fpcsrc".
116116
117117#### Сборка кросс-компилятора
118118
119119На лето 2016 - для сборки fpc-trunk, необходима рабочая версия комплятора FPC 3.0.0. (Общее правило: trunk всегда должен собираться, последним официально выпущеной версией FPC компилятора. Официальная версия всегда доступна в дистрибутиве, и её установка и использование не должно вызывать проблем)
120120
121121В качестве примера, исползуется сборка **arm-android** кросс-компилятора в Windows. Однако процесс сборки для других систем - идентичен. (Единственное что необходимо менять, это путь к файлам, а так же использование команды "sudo" при копировании комплиятора в системные папки для unix систем)
122122
123123Сборка кросс-компилтяора для **i386-android**, **mips-android** происходит по аналогичной схеме.
124124
125125Предположим, что используются следующие директории (папки)
126126
127127- Android NDK находится в `C:\Program Files\Android SDK\android-ndk-r8d`
128128- Исходники FPC trunk находятся в `C:\Develop\FPC\fpcsrc`
129129- Кросс-компилятор нужно установить в `C:\Develop\FPC\pp`
130130
1311311\. Добавьте в переменную-среды PATH пусть, где находится инструментарий из NDK. Для данного примера, это:
132132
133133`C:\Program Files\Android SDK\android-ndk-r8d\toolchains\arm-linux-androideabi-4.7\prebuilt\windows\bin`
134134
135135**Заметка:** "android-ndk-r8d" - это версия ndk. Этот суфикс меняется от выпуска к выпуску. Точно так же может меняться версия "arm-linux-androideabi-4.7". На лето 2016, на официальном сайте доступна вресия android-ndk-r11с, с версией androideabi-4.9. Соотвственно путь, при установке NDK в `C:\Program Files\Android SDK\` будет: `C:\Program Files\Android SDK\android-ndk-r11c\toolchains\arm-linux-androideabi-4.9\prebuilt\windows\bin`. Обязательно проверяйте версию NDK которую вы используете, и изменяйте путь соответствующим образом. В дальнейшем пример будет использовать версию r8d.
136136
1371372\. Компиляция
138138
1391392.1 Откройте командную строку и перейдите в папку с исходниками fpc:
140140
141141``` bash
142142 cd C:\Develop\FPC\fpcsrc
143143```
144144
1451452.2 Запустите следующую команду:
146146
147147``` bash
148148 make clean crossall crossinstall OS_TARGET=android CPU_TARGET=arm INSTALL_PREFIX=C:\Develop\FPC\pp
149149```
150150
151151**Заметка:** INSTALL_PREFIX - указывает пусть установки кросс-компилятора. Если он не указан, то установка произойдёт в путь, по-умолчанию. На unix-системах, это системная папка. Запись в неё, скорей всего, потребует прав супер пользователя, и должна быть использована команда sudo.
152152
153153По завершению выполнения команды, собранный кросс-компилятор (а также RTL и FCL) будут установлены и доступны в `C:\Develop\FPC\pp`. По-умолчанию, компиляция происходит с:
154154
155155- -O2 оптимизацией.
156156- включёном FPU эмуляторе (для ARM процессора)
157157
158158Если нужны другие настройки компилятора, но их можно передать с помощью параметра `CROSSOPT`.
159159
160160Например, если нужно собрать с поддержкой аппаратного FPU и поддержкой инструкций ARMv7a, следует использовать следующу команду:
161161
162162``` bash
163163 make clean crossall crossinstall OS_TARGET=android CPU_TARGET=arm CROSSOPT="-Cparmv7a -Cfvfpv3" INSTALL_PREFIX=C:\Develop\FPC\pp
164164```
165165
1661663\. Настройка
167167
168168В папке, куда был установлен кросс-компилятор `C:\Develop\FPC\pp\bin\i386-win32`, был помещён файл конфигурации fpc.cfg. Его нужно отредактировать и добавить следующий текст
169169
170-```
170+```text
171171-FuC:\Develop\FPC\pp\units\$FPCTARGET*
172172```
173173
174174``` pascal
175175#ifdef android
176176#ifdef cpuarm
177177 -FlC:\Program Files\Android SDK\android-ndk-r8d\platforms\android-14\arch-arm\usr\lib
178178#endif
179179#ifdef cpu386
180180 -FlC:\Program Files\Android SDK\android-ndk-r8d\platforms\android-14\arch-x86\usr\lib
181181#endif
182182#endif
183183```
184184
185185Параметр -Fl, указывает на стандартные системные библиотеки (например libc), от коротрых зависит RTL. Если этот параметр не указан в fpc.cfg, то необходимо будет передавать непосредственно при сборке проекта.
186186
187187**Заметка:** android-14 - это версия Android системы. На лето 2016 года, уже доступна Android-24. Обязательно убедитесь, что вы передаёте путь именно той Android системы, для которой вы хотите скомпилировать проект.
188188
189189Начиная с Android-21 доступены 64-битные архитектуры. Конфиуграционный файл для них будет выглядеть следующим образом.
190190
191191``` pascal
192192#ifdef android
193193#ifdef cpuaarch64
194194 -FlC:\Program Files\Android SDK\android-ndk-r11c\platforms\android-21\arch-arm64\usr\lib
195195#endif
196196#ifdef cpux86_64
197197 -FlC:\Program Files\Android SDK\android-ndk-r11c\platforms\android-21\arch-x86_64\usr\lib
198198#endif
199199#endif
200200```
201201
202202(arm64 именеются как aarch64 в FPC)
203203
204204### Компиляция под Андройд
205205
206206Убедитесь в том, что у вас есть настроенный кросс-компилятор.
207207
208208Программу под Андрой нужно скомпилировать следующим образом (при том, что кросс-компилятор установлен в C:\Develop\FPC\pp)
209209
210-```
210+```text
211211 C:\Develop\FPC\pp\bin\i386-win32\ppcrossarm -Tandroid testprog.pas
212212```
213213
214214### Общие Сведения
215215
216216- При сборке, компилятор не объявляет директиву **LINUX** для условной компиляции. Вместо этого, обявлены директивы **UNIX** и **ANDROID**.
217217
218218(Android не является полностью Linux-совместимой системой, например некоторые syscalls вызовы и стандртные функции, такие как pthreads отсуствтуют вовсе. Система так же ведёт себя иначе в некоторых случаях, чем Линукс, и количество различий продолжает расти. Чтобы избежать директив условной компиляции, if defined(linux) and not defined(android), используется комбинация UNIX + Android.
219219
220220- Динамические библиотеки (Shared libraries) не имеют заполненные переменных argc/argv, из-за ограничений Андройд системы.
221221- Набор доступных библиотек ограничен, тем, что доступно на Андройд платформе.
222222
223223### Известные Проблемы
224224
225225- Динамические библиотеки, скомпилированные FPC 3.0, не работают на Android 6.0 (и поздних версиях) исполняемые файлы не запускаются на Android 5.0 (и поздних). Начиная с Android 6.0 (Marshmallow), необходимо, чтобы библиотеки собирались с PIC-совместимостью. Начиная с Android 5.0 (Lollipop), чтобы исходные файлы собирались с PIC-совместимостью (PIE).
226226
227227
228228Поддержка PIC для Android была добавлена лишь в FPC 3.1.1 (trunk).
229229
230230
231231Если вам необходимо собирать проект для системы Android 5.0 (или поздней), вам необходимо собрать кросс-компилятор из исходников.
232232
233233
234234**Заметка**: FPC 3.1.1 (trunk) включает по-умолчанию PIC-совместимость для компилируемых библиотек и исходников под Андройд. PIC-совместимые библиотеки работают на любой версии Андройда (тестировалось даже на версии Android 1.5). Но PIC-совместимые исполняемые файлы работают только на Андродй 4.1+. Чтобы запускать программу на ранних версиях Андройда, необходимо принудительно отключать PIC-совместимость, передавая параметр `-Cg-` при компиляции.
235235
236236- модуль **clocale** под андройд не реализован
237237
238238# См. также
239239
240240- [[Android tutorial|Руководство по разработке для Android]]
241241- Вы можете использовать утилиту [[pas2jni]] для простого создания библиотек JNI из ваших исходных кодов и использования их в native-приложениях для Android.
242242
243243# Внешние ссылки
244244
245245- [Руководство "Lazarus and Android"](http://sourceforge.net/projects/laztoapk/files/Lazarus%20and%20Android.pdf/download) (PDF file)
246246
247247---
248248*From the Free Pascal wiki, page "Android/ru", as it stood on 2018-05-21 after a change by Useroflazarus, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
249249Category: Android/ru

Back to history