Разработка мобильных приложений на kivy, kivymd с использованием buildozer'а. Установка, запуск и решение проблем

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

На просторах интернета очень часто можно увидеть, что разработчики мобильных приложений на kivy и kivymd сталкиваются с теми или иными трудностями. В данной статье представлена пошаговая инструкция для разработки мобильных приложений на kivy и kivymd. Показано использование buildozer'а для построения *.apk файла и применение пакета adb (Android Debug Bridge) для отладки мобильного приложения на телефоне. Статья состоит из двух разделов. Первый посвящен созданию *.apk файла. Во втором рассматривается вариант отладки мобильного приложения на телефоне.

Инструкция актуальна для Ubuntu 20.04 и 22.04 (64bit). Возможно, на более новых версиях Ubuntu это также будет работать.

Все команды были выполнены в терминале среды разработки PyCharm. Использовался интерпретатор pyton версий 3.10

Первый раздел

В первом разделе приведена пошаговая инструкция по установке kivy, kivymd и buildozer'а, а также приведены команды и необходимые настройки для создания рабочего *.apk файла.

  1. Устанавливаем программный пакет kivy: pip3 install kivy

  2. Устанавливаем программный пакет kivymd: pip3 install kivymd

  3. Инструкция по установке buildozer'а приведена в https://buildozer.readthedocs.io/en/latest/installation.html

    Основные моменты из инструкции:

    3.1 Установить последнюю версию buildozer'а с помощью команды: pip3 install --user --upgrade buildozer (если используется виртуальная среда, то --user убираем)

    3.2 Далее выполняем следующие команды:

    • sudo apt update

    • sudo apt install -y git zip unzip openjdk-17-jdk python3-pip autoconf libtool pkg-config zlib1g-dev libncurses5-dev libncursesw5-dev libtinfo5 cmake libffi-dev libssl-dev pip3 install --user --upgrade Cython==0.29.33 virtualenv (если используется виртуальная среда, то --user убираем)

    3.3 Рекомендуется добавить в конец файла bashrc.sh следующую строчку: export PATH=$PATH:~/.local/bin/ (я не добавлял). У меня файл bashrc.sh расположен в директорий ..venv/lib/python3.10/site-packages/pexpect

    Если будут проблемы с openjdk-17, можно поставить минимально стабильно поддерживаемую openjdk-11

  4. В терминале переходим в папку проекта (командой cd) и создаем файл настроек buildozer.spec командой: buildozer init

  5. Поскольку, мы используем пакет kivymd, то его необходимо добавить в файл buildozer.spec. Для этого в файле buildozer.spec находим строчку requirements = python3,kivy и через запятую добавляем kivymd. Если вы используете какие-либо другие программные пакеты, то их тоже прописывайте (это нужно не всегда, иногда работает без добавления).

  6. Если в приложений вам нужен доступ к интеренету, то в файле buildozer.spec находим строчку android.permissions = ... и пишем INTERNET

  7. Выполняем команду: buildozer android clean

  8. Выполняем команду: buildozer android debug. Ждем когда будет готов *.apk файл. Первый раз компиляция занимает много времени.

  9. Копируем готовый *.apk файл на телефон и устанавливаем приложение (возможно, на телефоне нужно будет включить "Режим разработчика" (см. ниже))

Как правило, установка необходимых пакетов, запуск приложения в среде разработки (например в PyCharm), компиляция *.apk файла и установка приложения на сам телефон проходят без проблем.
Проблемы начинаются при запуске приложения на телефоне. Запускаем приложение - а оно не запускается. Почему? Не понятно. В интернете можно найти много решений, связанных с
установкой различных версий kivy, kivymd и buildozer'а. Мне это не помогло.

Второй раздел

Чтобы понять почему приложение не запускается, лучше всего запустить его в режиме отладки с помощью программного пакета adb.

Весь процесс как это сделать можно посмотреть здесь.

Основные моменты из инструкции:

  1. В файле buildozer.spec находим строчку p4a.branch и вместо master пишем develop

  2. Устанавливаем программный пакет adb: sudo apt install adb

  3. Выполняем следующие настройки в телефоне (на примере Redmi Note 9):

    3.1 Устанавливаем телефон в "Режим разработчика". Для этого заходим в "Настройки" -> "О телефоне" -> "Версия MIUI" (Нажимаем с задержкой четыре раза подряд). Должно выйти сообщение "Вы стали разработчиком"

    3.2 Заходим в "Расширенные настройки" -> "Для разработчиков" и включаем следующие опции:

    • "Не выключать экран"

    • "Отладка по USB"

    • "Установка через USB". Очень удобно не копировать *.apk файл, а установить напрямую через USB

    • "Отладка по USB (Настройки безопасности)"

  4. В терминале вводим команду: adb devices. В строчке List of devices attached должно отобразится ваше телефон-устройство

  5. В терминале переходим в папку bin (командой cd bin/). В папке bin должен находиться наш *.apk файл. Установим приложение на телефон используя команду: adb -s name_device install *.apk. Где name_device имя телефон-устройства из п.4, *.apk - полное название apk файла. Также есть очень полезная команда: buildozer android debug deploy run. Она скомпилирует *.apk файл, сама установит приложение на телефон и сразу запустит его. Команда запускается в папке проекта.

  6. Теперь вводим команду для отладки: adb -s name_device logcat *:S python:D. Дальше программный пакет adb будет ожидать вашего запуска приложения на телефоне. В терминале вы сможете увидеть всю трассировку запуска приложения и найти проблемные места (если они есть). Например, если не хвататет каких-то требований (requirements), то вы это увидите и сможете прописать их в файле buildozer.spec в строчке requirements.

Все действия, описанные в данной статье, я проделал на Ubuntu 22.04 (64bit). Все установилось и заработало без проблем. Надеюсь, данная статья будет для вас полезной.

Источник: https://habr.com/ru/articles/781844/


Интересные статьи

Интересные статьи

Есть мнение, что люди сопротивляются изменениям. Звучит так, что люди сопротивляются, для того чтобы сопротивляться. У такой проблемы нет продуктивного решения. Однако при внедрении изменений, мы и пр...
Это первый, вводный урок по линейной алгебре для разработки 3D-приложений от Александра Паничева — ведущего разработчика логики в UNIGINE. В этом уроке разберемся зачем 3D-разработчикам вообще нужна л...
Занимаюсь изучением английского языка и в процессе заметил, что главная моя проблема - это забывать английские слова. Знаю точно что знаю это слово, но не могу вспомнить....
Многие разработчики рано или поздно сталкиваются с задачей достичь реалистичного поведения тканей или волос. Для этого есть целый ряд технологий, однако далеко не все из них подхо...
Это — материалы из нашего корпоративного и хабраблога о работе с персональными данными, защите IT-систем и облачной разработке. В этом дайджесте вы найдете посты с разборами терминов, базовых под...