Sign in Join
Wiki copytemporary

Android/ru: what changed

Revision 1 to 2. 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
76-<figure>
77-<img src="ndk_install.png" title="ndk_install.png" />
78-<figcaption>ndk_install.png</figcaption>
79-</figure>
76+![](/wiki-images/4/4a/Ndk_install.png)
8077
8178Указанный путь будет использован для обновления конфигурационного файла, чтобы указать на андройд инструментарий
8279
8380`# --- Android NDK config begin ---`\
84-\
81+
8582`#ifdef android`\
8683` #ifdef cpuarm`\
8784`   -FlC:\ndk\android-ndk-r11c\platforms\android-9\arch-arm\usr\lib`\
8885`   -FDC:\ndk\android-ndk-r11c\toolchains\arm-linux-androideabi-4.9\prebuilt\windows\bin`\
8986` #endif`\
9087` #ifdef cpu386`\
9188`   -FlC:\ndk\android-ndk-r11c\platforms\android-9\arch-x86\usr\lib`\
9289`   -FDC:\ndk\android-ndk-r11c\toolchains\x86-4.9\prebuilt\windows\bin`\
9390` #endif`\
9491` #ifdef cpumips32`\
9592`   -FlC:\ndk\android-ndk-r11c\platforms\android-9\arch-mips\usr\lib`\
9693`   -FDC:\ndk\android-ndk-r11c\toolchains\mipsel-linux-android-4.9\prebuilt\windows\bin`\
9794` #endif`\
9895`#endif`\
99-\
96+
10097`# --- Android NDK config end ---`
10198
102993\. Дистрибутив кросс-комплиятора можно устанавливать поверх ранее установленных дистрибутивов FPC (например win32, win32-arm, win32-win64).
103100
104101### Сборка кросскомпилятора из исходников
105102
106103#### Получите последнюю версию исходников
107104
108105Получите последнюю версию исходников из SVN репозитория.
109106
110107Это можно сделать с помощью следующей командной строки
111108
112109``` bash
113110svn co http://svn.freepascal.org/svn/fpc/trunk fpcsrc
114111```
115112
116113Процесс загрузки исходников может занять некоторое время. По-завершению исходники будут находится в директории "fpcsrc".
117114
118115#### Сборка кросс-компилятора
119116
120117На лето 2016 - для сборки fpc-trunk, необходима рабочая версия комплятора FPC 3.0.0. (Общее правило: trunk всегда должен собираться, последним официально выпущеной версией FPC компилятора. Официальная версия всегда доступна в дистрибутиве, и её установка и использование не должно вызывать проблем)
121118
122119В качестве примера, исползуется сборка **arm-android** кросс-компилятора в Windows. Однако процесс сборки для других систем - идентичен. (Единственное что необходимо менять, это путь к файлам, а так же использование команды "sudo" при копировании комплиятора в системные папки для unix систем)
123120
124121Сборка кросс-компилтяора для **i386-android**, **mips-android** происходит по аналогичной схеме.
125122
126123Предположим, что используются следующие директории (папки)
127124
128125- Android NDK находится в `C:\Program Files\Android SDK\android-ndk-r8d`
129126- Исходники FPC trunk находятся в `C:\Develop\FPC\fpcsrc`
130127- Кросс-компилятор нужно установить в `C:\Develop\FPC\pp`
131128
1321291\. Добавьте в переменную-среды PATH пусть, где находится инструментарий из NDK. Для данного примера, это:
133130
134131`C:\Program Files\Android SDK\android-ndk-r8d\toolchains\arm-linux-androideabi-4.7\prebuilt\windows\bin`
135132
136133**Заметка:** "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.
137134
1381352\. Компиляция
139136
1401372.1 Откройте командную строку и перейдите в папку с исходниками fpc:
141138
142139``` bash
143140 cd C:\Develop\FPC\fpcsrc
144141```
145142
1461432.2 Запустите следующую команду:
147144
148145``` bash
149146 make clean crossall crossinstall OS_TARGET=android CPU_TARGET=arm INSTALL_PREFIX=C:\Develop\FPC\pp
150147```
151148
152149**Заметка:** INSTALL_PREFIX - указывает пусть установки кросс-компилятора. Если он не указан, то установка произойдёт в путь, по-умолчанию. На unix-системах, это системная папка. Запись в неё, скорей всего, потребует прав супер пользователя, и должна быть использована команда sudo.
153150
154151По завершению выполнения команды, собранный кросс-компилятор (а также RTL и FCL) будут установлены и доступны в `C:\Develop\FPC\pp`. По-умолчанию, компиляция происходит с:
155152
156153- -O2 оптимизацией.
157154- включёном FPU эмуляторе (для ARM процессора)
158155
159156Если нужны другие настройки компилятора, но их можно передать с помощью параметра `CROSSOPT`.
160157
161158Например, если нужно собрать с поддержкой аппаратного FPU и поддержкой инструкций ARMv7a, следует использовать следующу команду:
162159
163160``` bash
164161 make clean crossall crossinstall OS_TARGET=android CPU_TARGET=arm CROSSOPT="-Cparmv7a -Cfvfpv3" INSTALL_PREFIX=C:\Develop\FPC\pp
165162```
166163
1671643\. Настройка
168165
169166В папке, куда был установлен кросс-компилятор `C:\Develop\FPC\pp\bin\i386-win32`, был помещён файл конфигурации fpc.cfg. Его нужно отредактировать и добавить следующий текст
170167
171168`-FuC:\Develop\FPC\pp\units\$FPCTARGET*`
172169
173170`#ifdef android`\
174171`#ifdef cpuarm`\
175172` -FlC:\Program Files\Android SDK\android-ndk-r8d\platforms\android-14\arch-arm\usr\lib`\
176173`#endif`\
177174`#ifdef cpu386`\
178175` -FlC:\Program Files\Android SDK\android-ndk-r8d\platforms\android-14\arch-x86\usr\lib`\
179176`#endif`\
180177`#endif`
181178
182179Параметр -Fl, указывает на стандартные системные библиотеки (например libc), от коротрых зависит RTL. Если этот параметр не указан в fpc.cfg, то необходимо будет передавать непосредственно при сборке проекта.
183180
184181**Заметка:** android-14 - это версия Android системы. На лето 2016 года, уже доступна Android-24. Обязательно убедитесь, что вы передаёте путь именно той Android системы, для которой вы хотите скомпилировать проект.
185182
186183Начиная с Android-21 доступены 64-битные архитектуры. Конфиуграционный файл для них будет выглядеть следующим образом.
187184
188185`#ifdef android`\
189186`#ifdef cpuaarch64`\
190187` -FlC:\Program Files\Android SDK\android-ndk-r11c\platforms\android-21\arch-arm64\usr\lib`\
191188`#endif`\
192189`#ifdef cpux86_64`\
193190` -FlC:\Program Files\Android SDK\android-ndk-r11c\platforms\android-21\arch-x86_64\usr\lib`\
194191`#endif`\
195192`#endif`
196193
197194(arm64 именеются как aarch64 в FPC)
198195
199196### Компиляция под Андройд
200197
201198Убедитесь в том, что у вас есть настроенный кросс-компилятор.
202199
203200Программу под Андрой нужно скомпилировать следующим образом (при том, что кросс-компилятор установлен в C:\Develop\FPC\pp)
204201
205202` C:\Develop\FPC\pp\bin\i386-win32\ppcrossarm -Tandroid testprog.pas`
206203
207204### Общие Сведения
208205
209206- При сборке, компилятор не объявляет директиву **LINUX** для условной компиляции. Вместо этого, обявлены директивы **UNIX** и **ANDROID**.
210207
211208(Android не является полностью Linux-совместимой системой, например некоторые syscalls вызовы и стандртные функции, такие как pthreads отсуствтуют вовсе. Система так же ведёт себя иначе в некоторых случаях, чем Линукс, и количество различий продолжает расти. Чтобы избежать директив условной компиляции, if defined(linux) and not defined(android), используется комбинация UNIX + Android.
212209
213210- Динамические библиотеки (Shared libraries) не имеют заполненные переменных argc/argv, из-за ограничений Андройд системы.
214211- Набор доступных библиотек ограничен, тем, что доступно на Андройд платформе.
215212
216213### Известные Проблемы
217214
218215- Динамические библиотеки, скомпилированные FPC 3.0, не работают на Android 6.0 (и поздних версиях) исполняемые файлы не запускаются на Android 5.0 (и поздних). Начиная с Android 6.0 (Marshmallow), необходимо, чтобы библиотеки собирались с PIC-совместимостью. Начиная с Android 5.0 (Lollipop), чтобы исходные файлы собирались с PIC-совместимостью (PIE).
219216
220217
221218Поддержка PIC для Android была добавлена лишь в FPC 3.1.1 (trunk).
222219
223220
224221Если вам необходимо собирать проект для системы Android 5.0 (или поздней), вам необходимо собрать кросс-компилятор из исходников.
225222
226223
227224**Заметка**: FPC 3.1.1 (trunk) включает по-умолчанию PIC-совместимость для компилируемых библиотек и исходников под Андройд. PIC-совместимые библиотеки работают на любой версии Андройда (тестировалось даже на версии Android 1.5). Но PIC-совместимые исполняемые файлы работают только на Андродй 4.1+. Чтобы запускать программу на ранних версиях Андройда, необходимо принудительно отключать PIC-совместимость, передавая параметр `-Cg-` при компиляции.
228225
229226- модуль **clocale** под андройд не реализован
230227
231228# См. также
232229
233230- [[Android tutorial|Руководство по разработке для Android]]
234231- Вы можете использовать утилиту [[pas2jni]] для простого создания библиотек JNI из ваших исходных кодов и использования их в native-приложениях для Android.
235232
236233# Внешние ссылки
237234
238235- [Руководство "Lazarus and Android"](http://sourceforge.net/projects/laztoapk/files/Lazarus%20and%20Android.pdf/download) (PDF file)
239236
240237---
241238*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).*
242239Category: Android/ru

Back to history