Как создать мобильное приложение на python 2
Перейти к содержимому

Как создать мобильное приложение на python 2

  • автор:

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

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

Установка необходимого ПО

Перед тем, как начать создавать приложение, вам потребуется установить несколько программ. Вот их список:

  • Python 3.6 или новее
  • Kivy
  • Buildozer

Создание приложения на Kivy

Сначала вам нужно написать приложение на Kivy. Вот пример простого приложения:

Конфигурация Buildozer

Теперь, когда у вас есть приложение, вам нужно настроить Buildozer. Для этого создайте файл buildozer.spec в той же директории, что и ваше приложение, и добавьте следующий код:

Сборка приложения

Теперь вы готовы собрать свое приложение. Для этого просто выполните следующую команду в терминале:

После завершения сборки у вас поя

вится файл .apk, который можно установить на устройство с Android.

Отправка приложения на устройство

Чтобы установить приложение на свой Android-смартфон, выполните следующие шаги:

  1. Подключите смартфон к компьютеру через USB.
  2. Включите режим разработчика и разрешите установку приложений из неизвестных источников на своем смартфоне.
  3. Перенесите файл .apk на свой смартфон.
  4. Откройте файл .apk на своем смартфоне, чтобы установить приложение.

Поздравляем! Вы только что создали и установили свое первое приложение на Android, написанное на Python.

Заключение

Python, несмотря на то, что он не является традиционным выбором для разработки мобильных приложений, все же может быть очень полезным инструментом, особенно если вы уже знакомы с этим языком. С помощью Kivy и Buildozer вы можете создать кросс-платформенные приложения, которые будут работать как на Android, так и на iOS.

Python для Android: Как начать делать кроссплатформенные приложения с Kivy. Часть первая

Dmitry Kulbeda

В этом руководстве приведены шаги, необходимые для создания кроссплатформенного приложения для Android с использованием Python-фреймворка Kivy и Linux Ubuntu. Перед началом установки и запуском Kivy необходимо установить его зависимости. Большая часть времени уйдёт на подготовку рабочей среды Kivy путем установки библиотек, необходимых для его работы. В этом уроке Kivy будет установлен в виртуальной среде.

Используемой платформой будет Linux Ubuntu 18.04 с Python 3.6.5. При запуске Kivy на разных платформах появляются некоторые различия. Чтобы иметь возможность устанавливать библиотеки, перемещаться по каталогам ОС, копировать/удалять/извлекать файлы, запускать скрипты Python, читатель должен иметь базовое представление о командах терминала Linux и Python.

Это руководство имеет следующие разделы:

  1. Введение
  2. Установка зависимостей Kivy
  3. Создание виртуальной среды для установки Kivy
  4. Установка Cython
  5. Установка Kivy
  6. Импорт Kivy
  7. Создание простого приложения Kivy
  8. Установка Buildozer
  9. Создание файла buildozer.spec
  10. Создание приложения для Android с помощью Buildozer
  11. Используемые источники

1. Введение

Kivy используется для создания естественных пользовательских интерфейсов с преимуществами абстракции и модульности. Он отделяет разработчика от ненужных и сложных деталей и просто предоставляет простые API для выполнения сложных задач. В результате вы должны определить, какие бэкенд библиотеки Kivy будет использовать для выполнения своих задач. Мы собираемся использовать SDL (Simple DirectMedia Layer) — кроссплатформенную библиотеку для низкоуровневого доступа к графическому оборудованию через OpenGL. Помимо SDL, другие библиотеки, такие как GStreamer, используются для обработки аудио и видео. Поскольку такие библиотеки написаны на C, нам также потребуется Cython.

2. Установка зависимостей Kivy

Основываясь на инструкциях по установке Kivy на Linux (https://kivy.org/docs/installation/installation-linux.html), здесь перечислены необходимые библиотеки для установки SDL2 и GStreamer. Обратите внимание, что вы можете выбрать версию Python для использования в Kivy с помощью python и python-dev для Python 2 или с помощью python3 и python3-dev для Python 3. Pip также находится в перечисленном ниже списке для последующего использования в подготовке виртуальной среды Kivy.

3. Создание виртуальной среды для установки Kivy

После подготовки зависимостей Kivy мы можем начать установку самого Kivy, создав его виртуальную среду. Нет необходимости использовать виртуальную среду для запуска Kivy, но есть рекомендация отделить Kivy от других уже существующих проектов.

Перед началом создания виртуальной среды мы должны убедиться, что инструменты, необходимые для ее создания, уже установлены и обновлены. Следующие команды гарантируют, что инструменты virtualenv и setuptools уже существуют и обновлены.

virtualenv используется для создания изолированной среды Python. Для получения дополнительной информации о преимуществах виртуальной среды вы можете посетить страницу https://virtualenv.pypa.io/en/stable/. setuptools используется для упаковки проектов Python.

После этого мы готовы создать виртуальную среду Kivy. Следующая команда создает среду с названием mykivyinstall.

Аргумент —no-site-packages используется для изоляции среды от основной установки Python. Это делается для того, чтобы вы могли свободно работать с этим проектом, не затронув другие.

После введения этой команды мы ожидаем получить новую папку в текущем каталоге, названную в соответствии с именем виртуальной среды, как показано на рисунке 1.

В предыдущей команде будет использоваться обычный интерпретатор Python внутри среды. Это может быть Python 2, а мы работаем с Python 3. По этой причине мы могли бы явно указать, какой интерпретатор Python использовать с использованием ключа -p, как в следующей команде:

После создания виртуальной среды мы можем активировать её, чтобы начать установку Kivy. Она может быть активирована следующей командой.

Точка (.) в предыдущей команде представляет собой встроенную команду, которая выполняет содержимое файла, переданного в качестве аргумента. Это синоним источника команды. В результате предыдущая команда идентична этой команде:

Командная строка должна измениться после активации виртуальной среды и начать выглядеть следующим образом:

4. Установка Cython

Перед установкой Kivy Cython должен быть установлен в такой же среде в соответствии со следующей командой:

Обратите внимание, что версия Cython зависит от версии Kivy, которая будет установлена. В данный момент последняя версия Kivy1.10.0, и для нее требуется Cython 0.25.2, и именно поэтому она используется в приведенной выше команде. После этого мы готовы к установке Kivy.

5. Установка Kivy

Kivy можно установить с помощью pip в соответствии со следующей командой:

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

6. Импорт Kivy

При достижении этого этапа, ожидается, что Kivy уже установлен и успешно работает на вашем компьютере. Мы можем протестировать эту среду, импортировав Kivy, как показано на рисунке 2. Виртуальная среда активирована, Python активирован и Kivy успешно импортирован.

Убедившись, что Kivy работает хорошо, мы готовы создать наше первое приложение Kivy.

На этом конец первой части. Во второй части мы приступим непосредственно к написанию приложения и переносу его на Android-платформу.

Создание Android-приложения с помощью Python Kivy

Если вы являетесь Python-разработчиком и подумываете заняться мобильной разработкой, то фреймворк Kivy — это отличный выбор для вас. С помощью Kivy можно создавать платформонезависимые приложения, компилируемые под iOS, Android, Windows, MacOS и Linux.

Содержание

Чтобы понимать, о чем идет речь в этой статье, вы должны быть знакомы с языком Python. Давайте начнем!

Начало работы с Kivy

Во-первых, вам понадобится новая директория для вашего приложения. Убедитесь, что на вашей машине установлен Python, и создайте новый файл Python. Далее в терминале необходимо установить модуль Kivy. Чтобы избежать конфликтов пакетов, давайте сделаем это в виртуальным окружении:

После установки Kivy в терминале должно появиться сообщение об успешной установке, которое выглядит так, как показано на скриншотах ниже:

Установка Киви

Установка Киви

В нашей рабочей директории в файле main.py нам нужно импортировать модуль Kivy и указать, какую версию мы хотим получить. Можно использовать Kivy v2.0.0, но если у вас смартфон старше Android v8, то я рекомендую использовать v1.9.0. Во время сборки можно поработать с разными версиями, чтобы увидеть разницу в возможностях и производительности.

Чтобы указать версию, добавьте ее номер сразу после строки import kivy следующим образом:

Создание класса RandomNumber

Теперь создадим класс, который будет определять наше приложение. Я назову его RandomNumber . Этот класс будет наследовать класс App из Kivy. Поэтому необходимо импортировать приложение, добавив from kivy.app import App .

В класс RandomNumber необходимо добавить метод build . Чтобы вернуть пользовательский интерфейс, мы будем использовать функцию build . Пока что я возвращаю его в виде простой метки. Для этого необходимо импортировать Label с помощью строки from kivy.uix.label import Label :

Теперь скелет нашего приложения готов! Прежде чем двигаться дальше, необходимо инициировать экземпляр класса RandomNumber и запустить его в терминале или IDE, чтобы увидеть интерфейс:

При запуске экземпляра класса с текстом Random Number Generator должен появиться простой интерфейс или окно, выглядящее как на скриншоте ниже:

Простой интерфейс после выполнения кода

Простой интерфейс после выполнения кода

Вы не сможете запустить текст на Android, пока не закончите сборку.

Аутсорсинг интерфейса

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

Примечание по именованию файлов

Вы должны назвать этот файл так же, как и ваш класс, используя строчные буквы и расширение .kv . Kivy автоматически свяжет имя класса и имя файла, но на Android это может не сработать, если они полностью совпадают.

Внутри этого .kv -файла необходимо указать макет приложения, включая такие элементы, как ярлык, кнопки, формы и т.д. Макеты в Kivy бывают разных типов, но выполняют одну и ту же функцию: это контейнеры, используемые для расположения виджетов в соответствии с выбранным макетом.

Подробнее о различных макетах Kivy можно прочитать в руководстве по началу работы.

Применение box layout

Для простоты этого приложения я буду использовать компоновку box. В двух словах, при боксовом расположении виджеты и другие элементы располагаются в одной из двух ориентаций: вертикальной или горизонтальной.

Я добавлю три метки:

  • Для заголовка RandomNumber
  • Для размещения генерируемого случайного числа
  • Кнопка Generate , вызывающая функцию generate

Следует помнить, что эти метки будут располагаться друг над другом.

Мой .kv -файл выглядит так, как показано ниже, но вы можете изменять различные значения в соответствии с вашими требованиями:

Здесь строка 2 задает тип макета, который я использую для своего приложения, а строка 3 — ориентацию, о которой я только что говорил. Остальные строки являются настраиваемыми, поэтому вы можете указать, как должны выглядеть ваши элементы пользовательского интерфейса.

Значения цветов в Kivy

Значения цветов в Kivy не являются обычными значениями RGB — они нормализованы. Для понимания нормализации цвета необходимо знать, что распределение значений цвета обычно зависит от освещенности. Оно зависит от таких факторов, как условия освещения, эффект объектива и другие.

Чтобы избежать этой проблемы, Kivy использует соглашение (1, 1, 1) . Это представление Kivy для RGB (255, 255, 255) . Для преобразования обычных значений RGB в соглашение Kivy вам нужно разделить все ваши значения на 255 . Таким образом вы получите значения в диапазоне от 0 до 1.

Создание остальной части пользовательского интерфейса

В файле main.py оператор импорта Label больше не нужен, поскольку файл Kivy позаботится о вашем пользовательском интерфейсе. Однако необходимо импортировать boxlayout , который будет использоваться в файле Kivy.

В свой основной файл импортируйте BoxLayout и отредактируйте файл main.py так, чтобы в методе build возвращалась функция return BoxLayout() :

Если выполнить приведенную выше команду, то должен появиться простой интерфейс, содержащий заголовок, заполнитель _ и кнопку generate , на которую можно нажать:

Генерируется приложение случайных чисел

Обратите внимание, что для работы Kivy-файла не нужно импортировать ничего дополнительного. В принципе, когда вы запускаете приложение, оно возвращает boxlayout , ища внутри Kivy-файла файл с тем же именем, что и ваш класс.

Не забывайте, что это простой интерфейс, а вы можете сделать свое приложение настолько мощным, насколько захотите. За идеями обязательно обратитесь к документации по языку Kv.

Функция для генерации случайных чисел

Теперь, когда наше приложение почти готово, нам понадобится простая функция для генерации случайных чисел, когда пользователь нажимает кнопку generate . Это случайное число будет выводиться в интерфейс приложения. Для этого нам потребуется изменить несколько вещей в наших файлах.

Во-первых, импортируйте модуль random , который будет использоваться для генерации случайных чисел, и создайте функцию или метод, вызывающий сгенерированное число. Для импорта модуля random используйте оператор import random .

В данной демонстрации я буду использовать диапазон от 0 до 2000. Генерировать случайное число очень просто с помощью функции random.randint(0, 2000) . Мы добавим его в наш код в ближайшее время.

Далее мы создадим еще один класс, который будет представлять собой нашу собственную версию макета коробки. Наш класс будет наследовать класс box layout , в котором находится метод генерации случайных чисел и их отображения в интерфейсе:

В этом классе нужно создать метод generate , который будет не только генерировать случайные числа, но и манипулировать меткой, управляющей отображением случайного числа в файле Kivy.

Чтобы разместить этот метод, необходимо сначала внести изменения в файл .kv . Поскольку класс MyRoot унаследовал box layout , можно сделать MyRoot элементом верхнего уровня в файле .kv :

Обратите внимание, что все спецификации пользовательского интерфейса по-прежнему располагаются с отступами в макете Box Layout .

После этого необходимо добавить к метке идентификатор для хранения сгенерированных чисел, чтобы ими можно было легко манипулировать при вызове функции generate . Необходимо указать связь между id в этом файле и другим идентификатором в основном коде вверху, непосредственно перед строкой BoxLayout :

Строка random_label: random_label в основном означает, что метка с идентификатором random_label будет отображена на random_label в файле main.py, так что любое действие относительно random_label будет отображено на метку с указанным именем.

Теперь можно создать метод генерации случайного числа в файле main.py:

Обратите внимание, как метод класса манипулирует атрибутом text метки random_label , присваивая ему новое случайное число, сгенерированное функцией random.randint(0, 2000) .

Поскольку генерируемое случайное число является целым, для превращения его в строку необходимо выполнить приведение типов. В противном случае при выполнении метода в терминале будет выдана ошибка типа.

Теперь класс MyRoot должен выглядеть так, как показано ниже:

Поздравляем! Вы закончили работу с основным файлом приложения.

Ручное тестирование приложения

Осталось только убедиться, что при нажатии на кнопку generate вызывается эта функция. Для этого достаточно добавить строку on_press: root.generate_number() в часть выбора кнопки в файле .kv :

Теперь можно запустить это приложение:

Перед компиляцией нашего приложения для Android у меня есть плохие новости для пользователей Windows. Для компиляции приложения под Android вам потребуется Linux или macOS. Однако не обязательно иметь отдельный дистрибутив Linux — вместо этого можно использовать виртуальную машину.

Для компиляции и генерации полноценного приложения Android в формате .apk мы будем использовать инструмент Buildozer.

Установим Buildozer через терминал, используя одну из приведенных ниже команд:

Теперь мы установим некоторые необходимые для Buildozer зависимости. Я использую Linux Ergo, поэтому буду использовать команды, специфичные для Linux. Выполнять эти команды следует поочередно:

После выполнения указанных команд запустите buildozer init . Вы должны увидеть результат, аналогичный результату на скриншоте:

Успешная инициализация Buildozer

Успешная инициализация Buildozer

Приведенная выше команда создает файл buildozer .spec , который можно использовать для внесения спецификаций в приложение, включая название приложения, иконку и т.д. Файл .spec должен выглядеть следующим образом:

Если необходимо указать такие параметры, как значок, требования или экран загрузки, то следует отредактировать этот файл.

После внесения всех необходимых изменений в приложение запустите команду buildozer -v android debug из каталога app для сборки и компиляции приложения. Это может занять некоторое время, особенно если у вас медленное устройство.

После завершения процесса в терминале должно появиться несколько логов, один из которых подтверждает, что сборка прошла успешно:

В каталоге bin также должна находиться APK-версия приложения. Это исполняемый файл приложения, который будет установлен и запущен на телефоне:

Поздравляем! Если вы следовали этому руководству шаг за шагом, то у вас на телефоне должно быть простое приложение генератора случайных чисел. Поэкспериментируйте с ним, подкорректируйте некоторые значения, а затем заново его скомпилируйте. Запуск повторной сборки займет не так много времени, как первая сборка.

Заключение

Как видите, создать мобильное приложение на Python достаточно просто, особенно, если вы хорошо знакомы с фреймворком или модулем, с которым работаете.

Если вы хотите упаковать приложение для других платформ, то можете ознакомиться с шагами здесь. Это достаточно просто, и вам не понадобится переписывать логику приложения под другую платформу. И еще, имейте в виду, что для экосистемы Apple вам понадобится компьютер Mac.

Дальше можете ознакомиться с модулем Kivy и его виджетами. Невозможно познать все и сразу. Нужно только найти проект и как можно раньше начать работать. Счастливого кодинга!

Разработка мобильных приложений на Python. Библиотека KivyMD

Приветствую! Сегодня речь снова пойдет о библиотеке KivyMD — наборе виджетов для кроссплатформенной разработки на Python в стиле Material Design. В этой статье я сделаю не обзор виджетов KivyMD, как в недавней статье, а, скорее, это будет материал больше о позиционировании виджетов. Что-то похожего на туториал по разработке мобильных приложений на Python для новичков здесь не будет, так что если впервые слышите о фреймворке Kivy, вряд ли вам будет все это интересно. Ну, а мы погнали под кат!

На днях скачал из Google Play демонстрационное приложение Flutter UIKit:

Некоторые элементы UI отличаются, не в силу каких-то технических особенностей, из-за которых нельзя было получить идентичный результат, а просто я посчитал, что так будет более органичней (например, черный Toolbar, по моему мнению, совсем не смотрится).

Итак! Что бросается в глаза, глядя на экран, который мы будем воспроизводить? Прозрачный фон переднего layout. В Kivy такую возможность предоставляет FloatLayout, который позволяет размещать в себе виджеты и контроллы один над другим следующим образом:

Схематично наш экран будет выглядеть так:

Разметка этого экрана довольно простая:

Почему я говорю о FloatLayout, если наш экран унаследован от Screen?

Просто потому, что Screen —> RelativeLayout —> FloatLayout.

Все виджеты во FloatLayout позиционируются от нижнего левого угла, то есть, на экране им автоматически присваивается позиция (0, 0). В разметке не сложно проследить порядок добавления элементов на экран сверху вниз:

Если кто-то обратил внимание, то позицию мы указали только одному виджету:

Каждому виджету в Kivy помимо конкретных координат (x, y) можно указать подсказку позиции:

Так вот, нижнее фоновое изображение…

… благодаря виджету FitImage (библиотека KivyMD), автоматически растягивается на все выделенное ему пространство с сохранением пропорций изображения:

По умолчанию каждому виджету и лайоуту в Kivy предоставляется 100 % пространства, если не указанно иное. Например, если вы захотите добавить на экран одну кнопку, вы, очевидно сделаете следующее:

И получите результат:

Кнопка заняла 100 % пространства. Чтобы разместить кнопку по центру экрана, нужно, во-первых, задать ей необходимый размер и, во-вторых, указать, где она будет находится:

Теперь картина изменилась:

Также можно указать свойство size_hint, от 0 до 1, (эквивалент 0-100%), то есть, подсказка размера:

Или тоже самое, но подсказка ширины (size_hint_x):

MDToolbar имеет высоту в 56dp, не может занимать все пространство, и если ему не подсказать, что его место сверху, то он автоматически прилипнет к нижней части экрана:

Список карточек — OrderProductLayout (о нем мы поговорим ниже) — это ScrollView с элементами MDCard и он занимает всю высоту экрана, но благодаря padding (значения отступов в лайоутах) кажется, что он находится чуть выше центра экрана. Ну а MDBottomAppBar по умолчанию кидает якорь к нижней границе экрана. Поэтому только MDToolbar мы указали, где его место.

Теперь давайте посмотрим, что представляет из себя виджет OrderProductLayout:

Как видим, это четыре карточки, вложенные в ScrillView. В отличие от родительского экрана, который унаследован от FloatLayout, здесь все виджеты читаются сверху вниз.

Это очень удобно, поскольку прослеживается четкая иерархия виджетов, древовидная структура и с одного взгляда понятно, какой виджет/контролл какому лайоуту принадлежит. В Kivy наиболее частым используемым лайоутом является BoxLayout — коробка, которая позволяет размещать в себе виджеты по вертикали либо по горизонтали (по умолчанию — последнее):

Более наглядно это видно из следующей схемы, где используется BoxLayout горизонтальной ориентации:

Мы запретили BoxLayout использовать 100% пространства — size_hint_y: None и сказали — твоя высота будет ровно такой, какой будет высота самого высокого элемента, вложенного в тебя — height: self.minimum_height.

Если бы мы захотели использовать вертикальную прокрутку списка, нам нужно было бы изменить GridLayout следующим образом:

Заменить строки (rows) на столбцы (cols) и указать в minimum не ширину, а высоту:

Следующие карты — выбор цвета и размера (они практически идентичны):

Отличительной особенностью языка разметки Kv Language является не только четкая структура виджетов, но и то, что этот язык поддерживает некоторые возможности языка Python. А именно: вызов методов, создание/изменение переменных, логические, I/O и математические операции…

Вычисление значения value, объявленного в Label

… происходит непосредственно в самой разметке:

И я никогда не поверю, что вот это (код Flutter)…

… логичнее и читабельнее кода Kv Language:

Вчера меня спрашивали, как у Kivy обстоят дела со средой разработки, есть ли автокомплиты, хотрелоад и прочие прелести? С автокомплитами все отлично, если пользоваться PyCharm:

Насчет хотрелоад… Python — интерпретируемый язык. Kivy использует Python. Соответственно, чтобы увидеть результат, не нужна компиляция кода, запустил — увидел/протестирвал. Как я уже говорил, Kivy не использует нативные API для рендера UI, поэтому позволяет эмулировать различные модели устройств и платформ с помощью модуля screen. Достаточно запустить ваш проект с нужными параметрами, чтобы на компьютере открылось окно тестируемого приложения так, как если бы оно было запущено на реальном устройстве. Звучит странно, но поскольку Kivy абстрагируется от платформы в отрисовке UI, это позволяет не использовать тяжелые и медленные эмуляторы для тестов. Это касается только UI. Например, тестовое приложение, описываемое в этой статье тестировалось с параметрами -m screen:droid2, portrait, scale=.75.

Слева — запущено на мобильном устройстве, справа — на компьютере:

Ну, и, наконец, финальный результат — запуск на мобильном устройстве…

Единственное, что огорчает, это скорость запуска. У того же Flutter она просто феноменальная!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *