Разработчики, которые пытаются собрать первый APK-файл из Python-кода, чаще всего упираются в одну и ту же ошибку: Buildozer падает на этапе компиляции с сообщением о недостающих зависимостях python-for-android. Причина почти всегда одна — попытка собрать проект под Windows, тогда как официальный инструментарий сборки поддерживает только Linux и macOS. Это первое, что нужно проверить до начала работы.
Python не является нативным языком Android, где основой служат Java и Kotlin. Тем не менее написать полноценное мобильное приложение на Python реально: существуют фреймворки, которые упаковывают интерпретатор и ваш код в установочный пакет. В статье разберём рабочие инструменты, порядок создания проекта, сборку APK и ограничения, о которых стоит знать заранее.
Какие инструменты позволяют писать на Python под Android
Прямой компиляции Python в байт-код Android не существует, поэтому все решения работают по схеме «интерпретатор + обёртка». Выбор конкретного фреймворка зависит от типа приложения: утилита с простым интерфейсом, игра или прототип для внутреннего использования.
- 📱 Kivy — самый популярный фреймворк с собственным движком интерфейса на OpenGL, поддерживает мультитач и жесты.
- 🐝 BeeWare (Toga) — набор инструментов для создания приложений с нативными элементами интерфейса.
- 📦 PyDroid3 — IDE прямо на смартфоне, позволяет писать и запускать скрипты без компьютера.
- 🧪 Chaquopy — плагин для Android Studio, встраивающий Python в нативный проект на Kotlin или Java.
Для полноценного приложения с графическим интерфейсом чаще всего выбирают Kivy: у него зрелая экосистема и отработанный конвейер сборки через buildozer. Если нужен лишь скрипт-автоматизация на самом телефоне, достаточно PyDroid3 из магазина приложений.
Установка и настройка рабочего окружения
Для разработки на Kivy потребуется компьютер с Linux (подойдёт Ubuntu в виртуальной машине или WSL2 на Windows, хотя с WSL сборка иногда капризничает) и Python версии, поддерживаемой текущим релизом Kivy. Точную совместимость версий стоит сверить с официальной документацией проекта — она меняется от выпуска к выпуску.
Базовая установка фреймворка выполняется через пакетный менеджер:
pip install kivy
pip install buildozer
Дополнительно Buildozer потребует системные зависимости: git, zip, openjdk, а также заголовочные файлы Python. На Ubuntu их ставят через apt, точный список приведён в документации Buildozer. Без этих пакетов сборка прервётся на раннем этапе.
⚠️ Внимание: не пытайтесь собирать APK нативно под Windows — Buildozer официально её не поддерживает. Используйте Linux, macOS, виртуальную машину или облачную сборку через GitHub Actions.
Создаём первое приложение на Kivy
Минимальное приложение на Kivy умещается в один файл main.py. Каркас состоит из класса приложения и метода build(), возвращающего корневой виджет интерфейса.
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.label import Label
class MyApp(App):
def build(self):
layout = BoxLayout(orientation='vertical')
self.label = Label(text='Нажмите кнопку')
btn = Button(text='Старт')
btn.bind(on_press=self.on_press)
layout.add_widget(self.label)
layout.add_widget(btn)
return layout
def on_press(self, instance):
self.label.text = 'Привет, Android!'
MyApp().run()
Запустите файл командой python main.py на компьютере — появится окно с кнопкой. Если интерфейс работает на десктопе, с высокой вероятностью он запустится и на телефоне, поскольку Kivy использует один и тот же движок рендеринга на всех платформах.
☑️ Перед сборкой проверьте
Сборка APK через Buildozer
Сборка начинается с инициализации конфигурации в папке проекта. Команда buildozer init создаст файл buildozer.spec — главный документ, где задаются название приложения, пакет, версия и список зависимостей.
В параметре requirements перечислите все библиотеки, которые использует код, например: requirements = python3,kivy,requests. Пропущенная зависимость — самая частая причина падения приложения сразу после запуска на телефоне, хотя на компьютере всё работало.
buildozer -v android debug
Первая сборка занимает заметное время: Buildozer скачивает Android SDK, NDK и компилирует интерпретатор под мобильную архитектуру. Последующие сборки идут быстрее благодаря кэшу. Готовый файл появится в папке bin с расширением .apk.
⚠️ Внимание: debug-версия APK подписана тестовым ключом и подходит только для проверки на своём устройстве. Для публикации в Google Play потребуется release-сборка с собственным ключом подписи — храните файл ключа в безопасности, его потеря лишит возможности обновлять приложение.
Сравнение подходов: что выбрать под свою задачу
Универсального решения нет — у каждого инструмента своя ниша. Таблица ниже поможет сориентироваться.
| Инструмент | Тип приложения | Сложность сборки | Интерфейс |
|---|---|---|---|
| Kivy | Утилиты, игры, MVP | Средняя | Собственный, кроссплатформенный |
| BeeWare | Приложения с нативным UI | Средняя | Нативные элементы |
| PyDroid3 | Скрипты, обучение | Низкая | Консоль / базовый GUI |
| Chaquopy | Гибрид с Kotlin/Java | Высокая | Полностью нативный |
Если приложение требует высокой производительности, фоновых служб или глубокой интеграции с системой, честнее рассмотреть Kotlin — Python здесь упирается в ограничения платформы. Python разумно выбирать для прототипов, внутренних инструментов и приложений, где логика важнее скорости интерфейса.
Типичные ошибки и ограничения
Первая группа проблем — размер пакета. APK с интерпретатором и Kivy весит заметно больше аналогичного нативного приложения, а запуск занимает несколько секунд, потому что сначала стартует интерпретатор. Это нормальное поведение, а не признак ошибки.
Вторая группа — доступ к аппаратным функциям. Камера, GPS, Bluetooth и уведомления требуют явного запроса разрешений в buildozer.spec (параметр android.permissions) и часто обращения через библиотеку plyer. Без объявленного разрешения вызов функции молча не сработает или вызовет исключение.
Почему приложение вылетает сразу после сплеш-скрина
Чаще всего причина в отсутствующей зависимости в requirements, обращении к файлу по пути, которого нет на Android, или использовании библиотеки с C-расширением, для которой нет рецепта сборки в python-for-android. Диагностируется через logcat: ищите строку с Traceback.
Третья группа — библиотеки с нативным кодом. NumPy и ряд других пакетов имеют готовые рецепты сборки, но произвольная библиотека с C-расширениями может не собраться под Android вовсе. Перед тем как строить проект на конкретной зависимости, проверьте список поддерживаемых рецептов в репозитории python-for-android.
Публикация и дальнейшие шаги
Для загрузки в Google Play необходима release-сборка: buildozer android release, подписание пакета собственным ключом и выравнивание через инструменты Android SDK. Требования магазина к целевой версии API периодически повышаются — актуальный минимум уточняйте в консоли разработчика Google Play на момент публикации.
Если публикация в магазине не нужна, APK можно распространять напрямую: пользователь включает установку из неизвестных источников и ставит файл вручную. Для внутренних корпоративных инструментов это рабочий и простой путь.
Частые вопросы
Можно ли написать Android-приложение на Python без компьютера?
Да, приложение PyDroid3 позволяет писать и запускать Python-скрипты прямо на смартфоне, включая простые интерфейсы. Однако собрать полноценный APK таким способом не получится — для этого нужен Buildozer на Linux или macOS.
Почему Buildozer не работает на Windows?
Инструментарий сборки опирается на Linux-утилиты и цепочку компиляции NDK, которые нативно под Windows не функционируют. Обходные пути — виртуальная машина с Ubuntu, WSL2 или облачная сборка через CI-сервисы.
Насколько медленнее Python-приложение по сравнению с нативным?
Точных универсальных цифр нет — всё зависит от задачи. Заметнее всего разница при запуске (стартует интерпретатор) и в ресурсоёмких вычислениях. Для интерфейсных утилит и прототипов производительности Kivy обычно достаточно.
Можно ли использовать библиотеки вроде NumPy или Pandas?
Частично. Для популярных библиотек существуют рецепты сборки в python-for-android, их достаточно указать в requirements. Проверяйте наличие рецепта для конкретной библиотеки заранее — отсутствие рецепта означает, что пакет под Android собрать не выйдет без серьёзной доработки.
Подходит ли Python для коммерческого мобильного приложения?
Для MVP, внутренних корпоративных инструментов и приложений с простой логикой — вполне. Для продуктов, критичных к производительности, размеру пакета и глубокой интеграции с системой, надёжнее нативная разработка на Kotlin.