Разработка мобильных приложений на Python: возможности Kivy
Для кого эта статья:
- Люди, желающие научиться разрабатывать мобильные приложения на Python
- Новички в программировании, заинтересованные в использовании фреймворка Kivy
Разработчики, ищущие альтернативные способы создания кроссплатформенных приложений без изучения Java или Kotlin
Разработка мобильных приложений на Python? Да, это возможно, и Kivy — тот самый фреймворк, который делает это реальностью! 🚀 Помню, как сам впервые столкнулся с задачей создать приложение для Android без изучения Java или Kotlin — казалось нереальным. Но благодаря Python и Kivy этот процесс стал доступным даже новичкам. В этом руководстве мы пройдём путь от установки всех компонентов до запуска вашего первого мобильного приложения на реальном устройстве. Никакой лишней теории — только практические шаги и рабочий код!
Хотите освоить Python с нуля и быстро выйти на разработку реальных проектов, включая мобильные приложения? Обучение Python-разработке от Skypro — это не просто теория, а практический навык создания проектов под руководством опытных наставников. Представьте: всего за несколько месяцев вы сможете создавать собственные приложения для Android и iOS, даже если раньше никогда не программировали!
Знакомство с Kivy для разработки мобильных приложений
Kivy — это открытый Python-фреймворк для создания кроссплатформенных приложений с естественным пользовательским интерфейсом. Ключевое преимущество Kivy — возможность писать код один раз и запускать его на множестве платформ: Android, iOS, Windows, macOS и Linux. 💻📱
Алексей Петров, руководитель мобильной разработки
Когда нашей команде поставили задачу быстро разработать прототип приложения для сбора полевых данных, мы оказались перед дилеммой: разрабатывать отдельно под Android и iOS или искать универсальное решение. Нам требовалось приложение с картой, формами ввода и возможностью работы офлайн. Сроки были сжатыми — всего две недели.
Решение пришло неожиданно — один из джуниор-разработчиков предложил использовать Kivy. "У нас вся бэкенд-логика уже на Python, почему бы не сделать и мобильное приложение на нём?" — сказал он. Я скептически отнёсся к идее, но решил дать шанс.
Результат превзошёл ожидания! За 10 дней мы создали полнофункциональный прототип, который работал как на Android-планшетах полевых сотрудников, так и на iPhone менеджеров. Без Kivy нам потребовалось бы минимум в два раза больше времени и ресурсов.
Почему Kivy стоит вашего внимания:
- Скорость разработки — используйте знакомый Python-синтаксис без необходимости изучать новый язык
- Собственный язык разметки KV — позволяет отделить логику от представления
- Богатая библиотека виджетов — от простых кнопок до сложных графиков и 3D-визуализаций
- Поддержка мультитача — обрабатывайте несколько касаний одновременно
- Активное сообщество — множество примеров, библиотек и расширений
| Характеристика | Kivy | Flutter | React Native |
|---|---|---|---|
| Язык программирования | Python | Dart | JavaScript |
| Порог входа | Низкий (для знающих Python) | Средний | Средний |
| Производительность | Хорошая | Отличная | Хорошая |
| Размер приложения | ~15-20 МБ | ~5-10 МБ | ~10-15 МБ |
Kivy особенно хорош для:
- Научных и образовательных приложений
- Прототипирования перед серьёзной разработкой
- Проектов с ограниченными ресурсами разработки
- Ситуаций, когда вся остальная логика уже написана на Python

Настройка среды разработки для Python-приложения
Прежде чем погрузиться в код, необходимо правильно настроить среду разработки. Эти шаги обеспечат бесшовную работу с Kivy и подготовят всё необходимое для последующей сборки под Android. 🛠️
Шаг 1: Установка Python и виртуального окружения
Рекомендую использовать Python 3.7+ для работы с последними версиями Kivy:
# Создаём виртуальное окружение
python -m venv kivy_venv
# Активируем его (для Windows)
kivy_venv\Scripts\activate
# Для Linux/macOS
source kivy_venv/bin/activate
Шаг 2: Установка Kivy и зависимостей
# Обновляем pip
pip install --upgrade pip setuptools wheel
# Устанавливаем Kivy
pip install kivy
# Для разработки под Android понадобится также:
pip install buildozer
Шаг 3: Настройка IDE
Для комфортной работы рекомендую PyCharm или Visual Studio Code с расширениями для Python. В VS Code полезными будут:
- Python Extension
- Pylint для проверки кода
- Kivy Language для подсветки синтаксиса .kv файлов
Шаг 4: Проверка установки
Создайте простой файл test_kivy.py:
from kivy.app import App
from kivy.uix.button import Button
class TestApp(App):
def build(self):
return Button(text='Привет, Kivy!')
TestApp().run()
Запустите его командой python test_kivy.py. Если всё установлено правильно, откроется окно с кнопкой "Привет, Kivy!".
Шаг 5: Подготовка к разработке под Android
Для разработки под Android вам понадобится:
| Компонент | Назначение | Как установить |
|---|---|---|
| Java Development Kit (JDK) | Необходим для Android SDK | Скачать с официального сайта Oracle или использовать OpenJDK |
| Android SDK | Инструменты для разработки под Android | Устанавливается через Android Studio или отдельно |
| Buildozer | Автоматизирует процесс сборки | pip install buildozer |
| Android Debug Bridge (adb) | Для отладки и тестирования | Часть Android SDK |
Если вы используете Linux, установите дополнительные зависимости:
sudo apt-get install -y \
python3-pip \
build-essential \
git \
python3 \
python3-dev \
ffmpeg \
libsdl2-dev \
libsdl2-image-dev \
libsdl2-mixer-dev \
libsdl2-ttf-dev \
libportmidi-dev \
libswscale-dev \
libavformat-dev \
libavcodec-dev \
zlib1g-dev
После завершения настройки среды разработки можно переходить к структуре приложения и написанию кода.
Структура и основные компоненты приложения на Kivy
Понимание архитектуры Kivy-приложения — ключ к успешной разработке. Давайте рассмотрим основные компоненты и то, как они взаимодействуют между собой. 🏗️
Основные строительные блоки Kivy-приложения:
- App класс — основа любого приложения на Kivy, от него наследуются все приложения
- Виджеты — элементы интерфейса: кнопки, поля ввода, метки и т.д.
- Лейауты — контейнеры, определяющие размещение виджетов
- Файлы .kv — описывают UI в декларативном стиле (аналог XML в Android или HTML в веб-разработке)
- События и обработчики — позволяют реагировать на действия пользователя
Типичная структура каталогов Kivy-проекта выглядит так:
my_kivy_app/
│
├── main.py # Основной Python-файл с логикой
├── my_app.kv # KV-файл с описанием интерфейса
├── buildozer.spec # Конфигурация для сборки под Android
├── assets/ # Ресурсы (изображения, звуки и т.д.)
│ ├── images/
│ └── fonts/
└── screens/ # Модули для разных экранов приложения
├── __init__.py
├── main_screen.py
└── settings_screen.py
Виджеты — основа интерфейса
В Kivy всё, что вы видите на экране — это виджеты. Каждый виджет отвечает за определённую функцию и может содержать другие виджеты.
| Тип виджета | Назначение | Пример использования |
|---|---|---|
| Label | Отображение текста | Label(text='Привет мир') |
| Button | Кнопка для нажатия | Button(text='Нажми меня', on_press=callback) |
| TextInput | Поле ввода текста | TextInput(hint_text='Введите имя') |
| Image | Отображение изображений | Image(source='logo.png') |
| Slider | Ползунок для выбора значения | Slider(min=0, max=100, value=50) |
| ScreenManager | Управление несколькими экранами | ScreenManager() |
Лейауты — организация виджетов
Лейауты определяют, как виджеты размещаются на экране:
- BoxLayout — размещает виджеты в строку или столбец
- GridLayout — организует виджеты в сетку
- FloatLayout — позволяет позиционировать виджеты относительно
- RelativeLayout — позиционирует виджеты относительно лейаута
- AnchorLayout — привязывает виджеты к краям или центру
- StackLayout — автоматически выравнивает виджеты, переходя на новую строку при заполнении
Разделение логики и представления: файлы .kv
Одна из сильных сторон Kivy — возможность отделить логику от представления с помощью файлов .kv. Это делает код более организованным и легким для сопровождения.
Пример Python-файла main.py:
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
class Counter(BoxLayout):
count = 0
def increment(self):
self.count += 1
self.ids.counter_label.text = str(self.count)
class CounterApp(App):
def build(self):
return Counter()
if __name__ == '__main__':
CounterApp().run()
Соответствующий файл counter.kv:
<Counter>:
orientation: 'vertical'
padding: 20
Label:
id: counter_label
text: '0'
font_size: 48
Button:
text: 'Увеличить'
on_press: root.increment()
size_hint_y: None
height: 50
Kivy автоматически загружает файл .kv с именем, соответствующим имени вашего App-класса (без слова "App"). В нашем случае CounterApp ищет файл counter.kv.
Создаём простое мобильное приложение на Python с нуля
Настало время применить полученные знания и создать полноценное мобильное приложение! 📱 В качестве примера разработаем простой конвертер валют с возможностью конвертации между рублями, долларами и евро.
Шаг 1: Создание структуры проекта
Создайте следующую структуру каталогов и файлов:
currency_converter/
│
├── main.py # Основной Python-файл
└── currencyconverter.kv # KV-файл с UI
Шаг 2: Разработка логики приложения (main.py)
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import StringProperty
from kivy.core.window import Window
# Задаём размер окна для тестирования
Window.size = (350, 600)
class ConverterLayout(BoxLayout):
result = StringProperty('0')
# Курсы валют (упрощённо)
rates = {
'RUB_USD': 0.011, # 1 RUB = 0.011 USD
'RUB_EUR': 0.010, # 1 RUB = 0.010 EUR
'USD_RUB': 90.0, # 1 USD = 90 RUB
'USD_EUR': 0.93, # 1 USD = 0.93 EUR
'EUR_RUB': 98.0, # 1 EUR = 98 RUB
'EUR_USD': 1.07 # 1 EUR = 1.07 USD
}
def convert(self):
try:
amount = float(self.ids.input_amount.text)
from_currency = self.ids.from_spinner.text
to_currency = self.ids.to_spinner.text
if from_currency == to_currency:
self.result = str(amount)
else:
rate_key = f"{from_currency}_{to_currency}"
self.result = str(round(amount * self.rates[rate_key], 2))
except ValueError:
self.result = "Ошибка ввода"
except KeyError:
self.result = "Недоступная конвертация"
class CurrencyConverterApp(App):
def build(self):
return ConverterLayout()
if __name__ == '__main__':
CurrencyConverterApp().run()
Шаг 3: Создание интерфейса (currencyconverter.kv)
<ConverterLayout>:
orientation: 'vertical'
padding: 20
spacing: 10
canvas.before:
Color:
rgba: 0.95, 0.95, 0.95, 1
Rectangle:
pos: self.pos
size: self.size
Label:
text: 'Конвертер валют'
font_size: 28
size_hint_y: None
height: 50
color: 0, 0.5, 0.7, 1
BoxLayout:
orientation: 'vertical'
size_hint_y: None
height: 200
padding: 10
spacing: 10
canvas.before:
Color:
rgba: 1, 1, 1, 1
RoundedRectangle:
pos: self.pos
size: self.size
radius: [15]
Label:
text: 'Введите сумму:'
color: 0, 0, 0, 1
size_hint_y: None
height: 30
halign: 'left'
text_size: self.width, None
TextInput:
id: input_amount
hint_text: 'Например: 100'
input_filter: 'float'
multiline: False
size_hint_y: None
height: 40
padding: [10, 10, 10, 0]
BoxLayout:
orientation: 'horizontal'
size_hint_y: None
height: 100
spacing: 10
BoxLayout:
orientation: 'vertical'
Label:
text: 'Из'
color: 0, 0, 0, 1
Spinner:
id: from_spinner
text: 'RUB'
values: ['RUB', 'USD', 'EUR']
size_hint_y: None
height: 40
BoxLayout:
orientation: 'vertical'
Label:
text: 'В'
color: 0, 0, 0, 1
Spinner:
id: to_spinner
text: 'USD'
values: ['RUB', 'USD', 'EUR']
size_hint_y: None
height: 40
Button:
text: 'Конвертировать'
size_hint_y: None
height: 50
background_color: 0, 0.7, 0.3, 1
on_press: root.convert()
BoxLayout:
orientation: 'vertical'
size_hint_y: None
height: 150
padding: 10
spacing: 5
canvas.before:
Color:
rgba: 1, 1, 1, 1
RoundedRectangle:
pos: self.pos
size: self.size
radius: [15]
Label:
text: 'Результат:'
color: 0, 0, 0, 1
size_hint_y: None
height: 30
halign: 'left'
text_size: self.width, None
Label:
text: root.result
font_size: 32
color: 0, 0.5, 0.7, 1
Михаил Соколов, фрилансер-разработчик
Недавно мне поступил заказ от небольшой туристической компании — создать простое мобильное приложение для внутреннего использования гидами. Требовалось приложение с расписанием экскурсий, информацией о клиентах и интерактивной картой достопримечательностей.
Сроки были сжатыми, а бюджет ограничен. Клиент изначально думал, что придётся заказывать отдельные разработки под iOS и Android. Я предложил использовать Kivy и Python.
"Но будет ли такое приложение выглядеть профессионально?" — засомневался заказчик. Я быстро набросал прототип первого экрана, показав, что с помощью правильной стилизации KV-файлов можно добиться стильного интерфейса.
Результат превзошёл ожидания. Вместо двух отдельных кодовых баз мы получили одну, легко поддерживаемую. Приложение работало одинаково хорошо как на iPhone руководителя компании, так и на бюджетных Android-смартфонах гидов. Особенно клиент оценил скорость внесения изменений — когда нужно было срочно добавить новый функционал, я делал это за пару часов вместо нескольких дней.
Шаг 4: Тестирование приложения
Запустите приложение командой:
python main.py
Вы должны увидеть окно с интерфейсом конвертера валют. Протестируйте функциональность, введя различные суммы и выбрав разные валюты для конвертации.
Улучшения приложения
Чтобы сделать приложение более функциональным, можно добавить:
- Обновление курсов валют из интернета через API
- Сохранение истории конвертаций
- Добавление большего числа валют
- Офлайн-режим с сохранёнными курсами
Код для получения актуальных курсов валют через API можно реализовать так:
import requests
def get_exchange_rates():
try:
response = requests.get("https://api.exchangerate-api.com/v4/latest/USD")
data = response.json()
return data["rates"]
except:
# Возвращаем запасные значения в случае ошибки
return {
"RUB": 90.0,
"EUR": 0.93,
"USD": 1.0
}
Сборка и запуск приложения на Android устройствах
Теперь, когда наше приложение работает на компьютере, пришло время скомпилировать его для Android и запустить на реальном устройстве или эмуляторе. 📲
Шаг 1: Настройка Buildozer
Buildozer — это инструмент, который автоматизирует процесс сборки приложений для мобильных платформ. Создайте файл buildozer.spec в корне вашего проекта:
# В терминале перейдите в каталог проекта и выполните:
buildozer init
Эта команда создаст файл buildozer.spec с настройками по умолчанию. Откройте файл и настройте следующие параметры:
[app]
title = Конвертер валют
package.name = currencyconverter
package.domain = org.example
source.dir = .
source.include_exts = py,png,jpg,kv,atlas
version = 0.1
requirements = python3,kivy
orientation = portrait
osx.python_version = 3
fullscreen = 0
android.permissions = INTERNET
android.api = 31
android.minapi = 21
android.sdk = 31
android.ndk = 23b
android.arch = arm64-v8a
p4a.branch = master
Шаг 2: Сборка APK
Теперь можно запустить процесс сборки. Это может занять некоторое время при первом запуске, так как Buildozer загрузит и настроит все необходимые компоненты:
buildozer -v android debug
Флаг -v активирует подробный вывод, который полезен для отладки проблем при сборке. После успешной сборки вы найдёте APK-файл в каталоге bin:
bin/currencyconverter-0.1-debug.apk
Шаг 3: Установка на устройство
Установить приложение на устройство можно несколькими способами:
- Через ADB: подключите устройство по USB и выполните:
adb install -r bin/currencyconverter-0.1-debug.apk
- Через Buildozer: если устройство уже подключено:
buildozer android deploy run
- Вручную: передайте APK на устройство и установите, разрешив установку из неизвестных источников
Шаг 4: Отладка приложения на устройстве
Для просмотра логов приложения во время его работы на устройстве используйте:
adb logcat -s python
Эта команда отфильтрует и покажет только логи, связанные с Python (и соответственно, с вашим Kivy-приложением).
Шаг 5: Подготовка к публикации
Когда приложение будет готово к публикации, создайте релизную версию APK:
- Создайте ключ для подписи приложения:
keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
- Настройте параметры подписи в buildozer.spec:
android.keystore = my-release-key.keystore
android.keyalias = alias_name
- Соберите релизную версию:
buildozer android release
Получившийся APK-файл можно загрузить в Google Play или распространять другими способами.
Рекомендации для боевых приложений:
- Тщательно тестируйте на различных устройствах с разными размерами экранов
- Оптимизируйте размер приложения, исключая ненужные ресурсы
- Используйте try-except для обработки возможных ошибок
- Добавьте аналитику для отслеживания использования приложения
- Реализуйте механизм обновлений для вашего приложения
Следуя этим шагам, вы сможете не только создать функциональное мобильное приложение на Python с Kivy, но и успешно распространить его среди пользователей.
Создание мобильного приложения на Python с Kivy открывает новые горизонты для разработчиков, которые уже знакомы с этим языком программирования. Вы прошли путь от настройки среды до сборки работающего приложения под Android, и теперь обладаете знаниями, достаточными для разработки собственных мобильных решений. Помните, что ключ к успеху в мобильной разработке — это итеративный подход: создавайте, тестируйте, собирайте обратную связь и улучшайте. Мобильная экосистема постоянно развивается, и ваши навыки работы с Kivy станут ценным активом в вашем профессиональном арсенале.
Читайте также
- Python для Android: как создать мобильное приложение без Java
- Python на Android: полное руководство для мобильной разработки
- Топ-35 ресурсов и сообществ для Python-разработчиков всех уровней
- 5 лучших инструментов для компиляции Python-кода в APK файлы
- Python для Android: как создать мобильное приложение с нуля
- Разработка мобильных приложений на Python: возможности и фреймворки
- Python на Android: как программировать на смартфоне где угодно
- Python кроссплатформенная разработка: решения для всех ОС
- Python для создания мобильных приложений: инструменты и подходы
- Python на Android: как превратить смартфон в среду разработки