Sign in Join
Wiki copytemporary

Android/ru: what changed

Revision 2 to 3. 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
80-`# --- Android NDK config begin ---`\
80+``` pascal
81+# --- Android NDK config begin ---
8182
82-`#ifdef android`\
83-` #ifdef cpuarm`\
84-`   -FlC:\ndk\android-ndk-r11c\platforms\android-9\arch-arm\usr\lib`\
85-`   -FDC:\ndk\android-ndk-r11c\toolchains\arm-linux-androideabi-4.9\prebuilt\windows\bin`\
86-` #endif`\
87-` #ifdef cpu386`\
88-`   -FlC:\ndk\android-ndk-r11c\platforms\android-9\arch-x86\usr\lib`\
89-`   -FDC:\ndk\android-ndk-r11c\toolchains\x86-4.9\prebuilt\windows\bin`\
90-` #endif`\
91-` #ifdef cpumips32`\
92-`   -FlC:\ndk\android-ndk-r11c\platforms\android-9\arch-mips\usr\lib`\
93-`   -FDC:\ndk\android-ndk-r11c\toolchains\mipsel-linux-android-4.9\prebuilt\windows\bin`\
94-` #endif`\
95-`#endif`\
83+#ifdef android
84+ #ifdef cpuarm
85+ -FlC:\ndk\android-ndk-r11c\platforms\android-9\arch-arm\usr\lib
86+ -FDC:\ndk\android-ndk-r11c\toolchains\arm-linux-androideabi-4.9\prebuilt\windows\bin
87+ #endif
88+ #ifdef cpu386
89+ -FlC:\ndk\android-ndk-r11c\platforms\android-9\arch-x86\usr\lib
90+ -FDC:\ndk\android-ndk-r11c\toolchains\x86-4.9\prebuilt\windows\bin
91+ #endif
92+ #ifdef cpumips32
93+ -FlC:\ndk\android-ndk-r11c\platforms\android-9\arch-mips\usr\lib
94+ -FDC:\ndk\android-ndk-r11c\toolchains\mipsel-linux-android-4.9\prebuilt\windows\bin
95+ #endif
96+#endif
9697
97-`# --- Android NDK config end ---`
98+# --- Android NDK config end ---
99+```
98100
991013\. Дистрибутив кросс-комплиятора можно устанавливать поверх ранее установленных дистрибутивов FPC (например win32, win32-arm, win32-win64).
100102
101103### Сборка кросскомпилятора из исходников
102104
103105#### Получите последнюю версию исходников
104106
105107Получите последнюю версию исходников из SVN репозитория.
106108
107109Это можно сделать с помощью следующей командной строки
108110
109111``` bash
110112svn co http://svn.freepascal.org/svn/fpc/trunk fpcsrc
111113```
112114
113115Процесс загрузки исходников может занять некоторое время. По-завершению исходники будут находится в директории "fpcsrc".
114116
115117#### Сборка кросс-компилятора
116118
117119На лето 2016 - для сборки fpc-trunk, необходима рабочая версия комплятора FPC 3.0.0. (Общее правило: trunk всегда должен собираться, последним официально выпущеной версией FPC компилятора. Официальная версия всегда доступна в дистрибутиве, и её установка и использование не должно вызывать проблем)
118120
119121В качестве примера, исползуется сборка **arm-android** кросс-компилятора в Windows. Однако процесс сборки для других систем - идентичен. (Единственное что необходимо менять, это путь к файлам, а так же использование команды "sudo" при копировании комплиятора в системные папки для unix систем)
120122
121123Сборка кросс-компилтяора для **i386-android**, **mips-android** происходит по аналогичной схеме.
122124
123125Предположим, что используются следующие директории (папки)
124126
125127- Android NDK находится в `C:\Program Files\Android SDK\android-ndk-r8d`
126128- Исходники FPC trunk находятся в `C:\Develop\FPC\fpcsrc`
127129- Кросс-компилятор нужно установить в `C:\Develop\FPC\pp`
128130
1291311\. Добавьте в переменную-среды PATH пусть, где находится инструментарий из NDK. Для данного примера, это:
130132
131133`C:\Program Files\Android SDK\android-ndk-r8d\toolchains\arm-linux-androideabi-4.7\prebuilt\windows\bin`
132134
133135**Заметка:** "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.
134136
1351372\. Компиляция
136138
1371392.1 Откройте командную строку и перейдите в папку с исходниками fpc:
138140
139141``` bash
140142 cd C:\Develop\FPC\fpcsrc
141143```
142144
1431452.2 Запустите следующую команду:
144146
145147``` bash
146148 make clean crossall crossinstall OS_TARGET=android CPU_TARGET=arm INSTALL_PREFIX=C:\Develop\FPC\pp
147149```
148150
149151**Заметка:** INSTALL_PREFIX - указывает пусть установки кросс-компилятора. Если он не указан, то установка произойдёт в путь, по-умолчанию. На unix-системах, это системная папка. Запись в неё, скорей всего, потребует прав супер пользователя, и должна быть использована команда sudo.
150152
151153По завершению выполнения команды, собранный кросс-компилятор (а также RTL и FCL) будут установлены и доступны в `C:\Develop\FPC\pp`. По-умолчанию, компиляция происходит с:
152154
153155- -O2 оптимизацией.
154156- включёном FPU эмуляторе (для ARM процессора)
155157
156158Если нужны другие настройки компилятора, но их можно передать с помощью параметра `CROSSOPT`.
157159
158160Например, если нужно собрать с поддержкой аппаратного FPU и поддержкой инструкций ARMv7a, следует использовать следующу команду:
159161
160162``` bash
161163 make clean crossall crossinstall OS_TARGET=android CPU_TARGET=arm CROSSOPT="-Cparmv7a -Cfvfpv3" INSTALL_PREFIX=C:\Develop\FPC\pp
162164```
163165
1641663\. Настройка
165167
166168В папке, куда был установлен кросс-компилятор `C:\Develop\FPC\pp\bin\i386-win32`, был помещён файл конфигурации fpc.cfg. Его нужно отредактировать и добавить следующий текст
167169
168-`-FuC:\Develop\FPC\pp\units\$FPCTARGET*`
170+```
171+-FuC:\Develop\FPC\pp\units\$FPCTARGET*
172+```
169173
170-`#ifdef android`\
171-`#ifdef cpuarm`\
172-` -FlC:\Program Files\Android SDK\android-ndk-r8d\platforms\android-14\arch-arm\usr\lib`\
173-`#endif`\
174-`#ifdef cpu386`\
175-` -FlC:\Program Files\Android SDK\android-ndk-r8d\platforms\android-14\arch-x86\usr\lib`\
176-`#endif`\
177-`#endif`
174+``` pascal
175+#ifdef android
176+#ifdef cpuarm
177+ -FlC:\Program Files\Android SDK\android-ndk-r8d\platforms\android-14\arch-arm\usr\lib
178+#endif
179+#ifdef cpu386
180+ -FlC:\Program Files\Android SDK\android-ndk-r8d\platforms\android-14\arch-x86\usr\lib
181+#endif
182+#endif
183+```
178184
179185Параметр -Fl, указывает на стандартные системные библиотеки (например libc), от коротрых зависит RTL. Если этот параметр не указан в fpc.cfg, то необходимо будет передавать непосредственно при сборке проекта.
180186
181187**Заметка:** android-14 - это версия Android системы. На лето 2016 года, уже доступна Android-24. Обязательно убедитесь, что вы передаёте путь именно той Android системы, для которой вы хотите скомпилировать проект.
182188
183189Начиная с Android-21 доступены 64-битные архитектуры. Конфиуграционный файл для них будет выглядеть следующим образом.
184190
185-`#ifdef android`\
186-`#ifdef cpuaarch64`\
187-` -FlC:\Program Files\Android SDK\android-ndk-r11c\platforms\android-21\arch-arm64\usr\lib`\
188-`#endif`\
189-`#ifdef cpux86_64`\
190-` -FlC:\Program Files\Android SDK\android-ndk-r11c\platforms\android-21\arch-x86_64\usr\lib`\
191-`#endif`\
192-`#endif`
191+``` pascal
192+#ifdef android
193+#ifdef cpuaarch64
194+ -FlC:\Program Files\Android SDK\android-ndk-r11c\platforms\android-21\arch-arm64\usr\lib
195+#endif
196+#ifdef cpux86_64
197+ -FlC:\Program Files\Android SDK\android-ndk-r11c\platforms\android-21\arch-x86_64\usr\lib
198+#endif
199+#endif
200+```
193201
194202(arm64 именеются как aarch64 в FPC)
195203
196204### Компиляция под Андройд
197205
198206Убедитесь в том, что у вас есть настроенный кросс-компилятор.
199207
200208Программу под Андрой нужно скомпилировать следующим образом (при том, что кросс-компилятор установлен в C:\Develop\FPC\pp)
201209
202-` C:\Develop\FPC\pp\bin\i386-win32\ppcrossarm -Tandroid testprog.pas`
210+```
211+ C:\Develop\FPC\pp\bin\i386-win32\ppcrossarm -Tandroid testprog.pas
212+```
203213
204214### Общие Сведения
205215
206216- При сборке, компилятор не объявляет директиву **LINUX** для условной компиляции. Вместо этого, обявлены директивы **UNIX** и **ANDROID**.
207217
208218(Android не является полностью Linux-совместимой системой, например некоторые syscalls вызовы и стандртные функции, такие как pthreads отсуствтуют вовсе. Система так же ведёт себя иначе в некоторых случаях, чем Линукс, и количество различий продолжает расти. Чтобы избежать директив условной компиляции, if defined(linux) and not defined(android), используется комбинация UNIX + Android.
209219
210220- Динамические библиотеки (Shared libraries) не имеют заполненные переменных argc/argv, из-за ограничений Андройд системы.
211221- Набор доступных библиотек ограничен, тем, что доступно на Андройд платформе.
212222
213223### Известные Проблемы
214224
215225- Динамические библиотеки, скомпилированные FPC 3.0, не работают на Android 6.0 (и поздних версиях) исполняемые файлы не запускаются на Android 5.0 (и поздних). Начиная с Android 6.0 (Marshmallow), необходимо, чтобы библиотеки собирались с PIC-совместимостью. Начиная с Android 5.0 (Lollipop), чтобы исходные файлы собирались с PIC-совместимостью (PIE).
216226
217227
218228Поддержка PIC для Android была добавлена лишь в FPC 3.1.1 (trunk).
219229
220230
221231Если вам необходимо собирать проект для системы Android 5.0 (или поздней), вам необходимо собрать кросс-компилятор из исходников.
222232
223233
224234**Заметка**: FPC 3.1.1 (trunk) включает по-умолчанию PIC-совместимость для компилируемых библиотек и исходников под Андройд. PIC-совместимые библиотеки работают на любой версии Андройда (тестировалось даже на версии Android 1.5). Но PIC-совместимые исполняемые файлы работают только на Андродй 4.1+. Чтобы запускать программу на ранних версиях Андройда, необходимо принудительно отключать PIC-совместимость, передавая параметр `-Cg-` при компиляции.
225235
226236- модуль **clocale** под андройд не реализован
227237
228238# См. также
229239
230240- [[Android tutorial|Руководство по разработке для Android]]
231241- Вы можете использовать утилиту [[pas2jni]] для простого создания библиотек JNI из ваших исходных кодов и использования их в native-приложениях для Android.
232242
233243# Внешние ссылки
234244
235245- [Руководство "Lazarus and Android"](http://sourceforge.net/projects/laztoapk/files/Lazarus%20and%20Android.pdf/download) (PDF file)
236246
237247---
238248*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).*
239249Category: Android/ru

Back to history