Как написать приложение на Python для Android

Разработчики, которые пытаются собрать первый 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 использует один и тот же движок рендеринга на всех платформах.

☑️ Перед сборкой проверьте

Выполнено: 0 / 5

Сборка 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-сборка с собственным ключом подписи — храните файл ключа в безопасности, его потеря лишит возможности обновлять приложение.
📊 Какой инструмент для Python на Android вы используете или планируете?
Kivy + Buildozer
BeeWare / Toga
PyDroid3 на телефоне
Chaquopy в Android Studio

Сравнение подходов: что выбрать под свою задачу

Универсального решения нет — у каждого инструмента своя ниша. Таблица ниже поможет сориентироваться.

ИнструментТип приложенияСложность сборкиИнтерфейс
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.