Делаем из Python кода Android APK или AAB

wonder485_ssdoj

Участник
14 Мар 2026
2
0
0 ₽
Python-For-Android - это инструмент для приложений Python на Android.
Вы можете создать свое собственное распределение Python, включая модули и зависимости, которые вы хотите, и объединить его в APK или AAB вместе с собственным кодом.


Особенности включают:

Различные приложения поддерживают, включая Kivy, PYSDL2 и WebView с Python WebServer.
Автоматическая поддержка большинства модулей Python и встроенная поддержка для многих других, включая популярные зависимости, такие как Numpy и SQLalchemy.
Несколько целей архитектуры, для APK, оптимизированных на любом данном устройстве.
AAB: поддержка пакета приложений Android.


Установка:


sudo apt install python3 && python3-pip
pip3 install python-for-android

Или распакуйте архив:

sudo apt install python3 && python3-pip
sudo python3 setup.py install



Проверьте, что установка работает:

p4a --version

Чтобы создать любые реальные приложения, настройте Android SDK и NDK






Со всем установленным, постройте APK, например:


p4a apk --requirements=kivy --private /home/username/devel/planewave_frozen/ --package=net.inclem.planewavessdl2 --name="planewavessdl2" --version=0.5 --bootstrap=sdl2


Если вам нужно развернуть приложение в Google Play, требуется Android App Bundle (AAB)


Вам нужно скачать и распаковать Android SDK и NDK в каталог (давайте скажем $Home/Documents/):

Для Android SDK вы можете скачать Просто инструменты командной строки. Когда вы извлекли их, вы увидите только каталог с именем инструментов tools, и вам нужно будет запустить дополнительные команды, чтобы установить необходимые пакеты SDK.

Для Android NDK обратите внимание, что современные релизы будут работать только на 64-разрядной операционной системе.
Минимальная и рекомендованная версия NDK для использования - R23B:

Перейти на страницу загрузки NDK
Пользователи Windows должны создать виртуальную машину с установленной ОС GNU Linux, а затем вы можете следовать описанным инструкциям из вашей виртуальной машины.




Платформа и инструменты создания​


Во-первых, установите платформу API для нацеливания.

Рекомендуемый target Уровень API составляет 27, вы можете заменить его другим числом, но имейте в виду, что другие версии API менее хорошо проверены, а более старые устройства все еще поддерживаются до рекомендуемого указанного minimum API/NDK Уровень 21:

$SDK_DIR/tools/bin/sdkmanager "platforms;android-27"


Во-вторых, установите конструкции сборки. Вы можете использовать $SDK_DIR/tools/bin/sdkmanager --list, чтобы увидеть все возможности, но 28.0.2-последняя версия на текущий момент:

$SDK_DIR/tools/bin/sdkmanager "build-tools;28.0.2"


Настройте p4a для использования вашего SDK/NDK

Затем вы можете редактировать ~/.bashrc или другую любимую оболочку, чтобы включить новые переменные среды, необходимые для построения на Android:




Код:
# Отрегулируйте пути!
export ANDROIDSDK="$HOME/Documents/android-sdk-27"
export ANDROIDNDK="$HOME/Documents/android-ndk-r23b"
export ANDROIDAPI="27"  # Target API version of your application
export NDKAPI="21"  # Minimum supported API version of your application
export ANDROIDNDKVER="r10e"  # Version of the NDK you installed





У вас есть возможность настроить на любую команду путь к API SDK, NDK и Android с использованием:



Код:
--sdk-dir PATH как эквивалент $ANDROIDSDK
--ndk-dir PATH как эквивалент $ANDROIDNDK
--android-api VERSION как эквивалент $ANDROIDAPI
--ndk-api VERSION как эквивалент $NDKAPI
--ndk-version VERSION как эквивалент $ANDROIDNDKVER







Применение:​


Создайте приложение Kivy или SDL2, чтобы создать ваше приложение, вам необходимо указать имя, версию, идентификатор пакета, начальную загрузку, которую вы хотите использовать (SDL2 для приложений Kivy или SDL2) и требования requirements:


p4a apk --private $HOME/code/myapp --package=org.example.myapp --name "My application" --version 0.1 --bootstrap=sdl2 --requirements=python3,kivy


Примечание в --requirements : Вы должны добавить все библиотеки/зависимости, которые необходимо запускать ваше приложение.
Пример: --requirements=python3,kivy,vispy
Для приложения SDL2 Kivy не нужна, но вам нужно добавить любые обертки, которые вы можете использовать (например, pysdl2).


Эта команда p4a apk создает распределение с Python3, Kivy и всем остальным, что вы указали в требованиях.
Он будет упакован с использованием начальной загрузки SDL2 и создаст файл .APK




Примечания к совместимости:
Python 2 больше не поддерживается Python-Android!




Создайте приложение WebView, чтобы построить ваше приложение, вам нужно иметь имя, версию, идентификатор пакета и явно использовать начальную загрузку WebView, а также требования:


p4a apk --private $HOME/code/myapp --package=org.example.myapp --name "My WebView Application" --version 0.1 --bootstrap=webview --requirements=flask --port=5000


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

Вы также можете заменить flask другой веб-структурой.

Замените --port=5000 на порт, на котором ваше приложение будет обслуживать веб-сайт. По умолчанию для flask составляет 5000.





Создайте архив библиотеки услуг


Чтобы построить архив Android (.AAR), содержащий сервис Android, вам нужно имя, версия, идентификатор пакета, явно используйте начальную загрузку service_library и объявить точку входа в службу, а также требования и arch:

p4a aar --private $HOME/code/myapp --package=org.example.myapp --name "My library" --version 0.1 --bootstrap=service_library --requirements=python3 --release --service=myservice:service.py --arch=arm64-v8a --arch=armeabi-v7a

Затем вы можете вызвать сгенерированные точку(и) Java для ваших услуг Python в других framework APK Build.





Экспорт пакета приложений Android (AAB) для распределения в Google Play


Начиная с августа 2021 года для новых приложений и с ноября 2021 года для обновлений приложений для существующих приложений, Google Play Console потребует пакета приложений Android, а не для долгосрочного APK.
Необходимая работа для выполнения новых требований:

p4a aab –private $HOME/code/myapp –package=org.example.myapp –name=”My App” –version 0.1 –bootstrap=sdl2 –requirements=python3,kivy –arch=arm64-v8a –arch=armeabi-v7a –release


Эта команда p4a aab создает распределение с Python3, Kivy и всем остальным, что вы указали в требованиях.
Он будет упакован с использованием начальной загрузки SDL2 и производит файл .aab, который содержит двоичные файлы как для Armeabi-V7A, так и для ARM64-V8A ABI.

Предполагается, что приложение для Android должна использоваться для распределения вашего приложения. Если вам нужно проверить его локально, на своем устройстве, вы можете использовать
bundletool < >






Перестроить:


Если что-то пойдет не так, и вы хотите очистить загрузки и релизы, запустите:
p4a clean_all


Если вы просто хотите очистить сборки, чтобы избежать загрузки зависимостей, запустите:
p4a clean_builds && p4a clean_dists



Вы можете увидеть список доступного:
p4a recipes


Если вы внесете свой вклад в p4a и хотите снова проверить, вам необходимо очистить сборку и восстановить свое распределение:
p4a clean_recipe_build RECIPENAME
p4a clean_dists
# Затем восстановите свое распределение


Вы можете написать частные recipes для вашего приложения, просто создать папку p4a-recipes в своем каталоге сборки и поместите в нее recipe (отредактируйте init.py):
mkdir -p p4a-recipes/myrecipe
touch p4a-recipes/myrecipe/init.py





Управление распределением


Каждый раз, когда вы начинаете новый проект, Python-For-Android внутренне создаст новое распространение (проект Android Build, включая Python и другие ваши зависимости, скомпилированные для Android), согласно требованиям, которые вы добавили в командной строке.
Вы можете заставить повторное использование существующего распределения, добавив:

p4a apk --dist_name=myproject ...


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

Вы можете перечислить доступные распределения:
p4a distributions

И очистите их все:
p4a clean_dists




Конфигурационный файл


Python для Android проверяет текущий каталог для файла конфигурации с именем .p4a. Если обнаружено, он добавляет все строки в качестве параметров в командную строку.
Например, вы можете добавить параметры, которые всегда будут включены, например:

--dist_name my_example
--android_api 27
--requirements kivy,openssl




Вы можете переопределить источник любого recipes, используя переменную среды $P4A_recipename_DIR
Например, чтобы проверить свой собственный Kivy, который вы можете установить:

export P4A_kivy_DIR=/home/username/kivy

Указанный каталог будет скопирован в Python-Android вместо загрузки из обычного URL-адреса
Эти аргументы могут быть переданы любой команде, чтобы изменить ее поведение, хотя не все команды используют их.


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

--sdk_dir
Путь папки, где установлен Android SDK. Это может быть альтернативно установлено несколькими другими способами.

--android_api
Уровень API Android для цели; Python-For-Android проверит, установлены ли инструменты платформы для этого уровня.

--ndk_dir
Путь папки, где установлен Android NDK. Это может быть альтернативно установлено несколькими другими способами.

--ndk_version
Версия установленной NDK, важно, потому что внутренние пути папок для создания инструментов зависят от этого. Это можно альтернативно установлено несколькими другими способами, или если ваш NDK DIR содержит release.txt, содержащий версию, которая автоматически проверяется, поэтому вам не нужно вручную устанавливать его.
p4a поддерживает несколько аргументов, используемых для указания, какое составное распределение Android вы хотите использовать. Вы можете передать любой из этих аргументов любой команде, и, если требуется распределение, они будут использоваться для загрузки, компиляции или download по мере необходимости.

Ни один из этих вариантов не является важным, и в принципе вам нужно предоставить только те, которые вам нужны.

--name NAME
Название распределения. Может быть создано только одно распределение с данным именем.

--requirements LIST,OF,REQUIREMENTS
Recipes, которые ваше распределение должно содержать, в качестве списка с запятой. Это должны быть имена recipes или названия pypi модулей Python.

--force-build BOOL
Должно ли распределение быть составлено с нуля.

--arch
Архитектура для строительства. Вы можете указать несколько архитектур, которые можно построить одновременно.
В качестве примера p4a ... --arch arm64-v8a --arch armeabi-v7a ... создаст распределение как для arm64-V8a, так и для armeabi-V7a.

--bootstrap BOOTSTRAP
Java Bootstrap для использования для вашего приложения. В основном вам не нужно беспокоиться об этом или устанавливать его вручную, так как будет выбрано из ваших -requirements
Текущие варианты - это sdl2 (используется с Kivy и большинством других приложений) или webview.
 
Активность
Пока здесь никого нет