Разработка мобильных приложений на Python: возможности Kivy

Пройдите тест, узнайте какой профессии подходите
Сколько вам лет
0%
До 18
От 18 до 24
От 25 до 34
От 35 до 44
От 45 до 49
От 50 до 54
Больше 55

Для кого эта статья:

  • Люди, желающие научиться разрабатывать мобильные приложения на 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:

Python
Скопировать код
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:

Python
Скопировать код
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:

yaml
Скопировать код
<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)

Python
Скопировать код
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)

yaml
Скопировать код
<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 можно реализовать так:

Python
Скопировать код
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:

  1. Создайте ключ для подписи приложения:
keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000

  1. Настройте параметры подписи в buildozer.spec:
android.keystore = my-release-key.keystore
android.keyalias = alias_name

  1. Соберите релизную версию:
buildozer android release

Получившийся APK-файл можно загрузить в Google Play или распространять другими способами.

Рекомендации для боевых приложений:

  • Тщательно тестируйте на различных устройствах с разными размерами экранов
  • Оптимизируйте размер приложения, исключая ненужные ресурсы
  • Используйте try-except для обработки возможных ошибок
  • Добавьте аналитику для отслеживания использования приложения
  • Реализуйте механизм обновлений для вашего приложения

Следуя этим шагам, вы сможете не только создать функциональное мобильное приложение на Python с Kivy, но и успешно распространить его среди пользователей.

Создание мобильного приложения на Python с Kivy открывает новые горизонты для разработчиков, которые уже знакомы с этим языком программирования. Вы прошли путь от настройки среды до сборки работающего приложения под Android, и теперь обладаете знаниями, достаточными для разработки собственных мобильных решений. Помните, что ключ к успеху в мобильной разработке — это итеративный подход: создавайте, тестируйте, собирайте обратную связь и улучшайте. Мобильная экосистема постоянно развивается, и ваши навыки работы с Kivy станут ценным активом в вашем профессиональном арсенале.

Читайте также

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Что такое Kivy?
1 / 5

Загрузка...