На просторах интернета очень часто можно увидеть, что разработчики мобильных приложений на kivy и kivymd сталкиваются с теми или иными трудностями. В данной статье представлена пошаговая инструкция для разработки мобильных приложений на kivy и kivymd. Показано использование buildozer’а для построения *.apk файла и применение пакета adb (Android Debug Bridge) для отладки мобильного приложения на телефоне. Статья состоит из двух разделов. Первый посвящен созданию *.apk файла. Во втором рассматривается вариант отладки мобильного приложения на телефоне.
Инструкция актуальна для Ubuntu 20.04 и 22.04 (64bit). Возможно, на более новых версиях Ubuntu это также будет работать.
Все команды были выполнены в терминале среды разработки PyCharm. Использовался интерпретатор python версий 3.10
Первый раздел
В первом разделе приведена пошаговая инструкция по установке kivy, kivymd и buildozer’а, а также приведены команды и необходимые настройки для создания рабочего *.apk файла.
-
Устанавливаем программный пакет kivy: pip3 install kivy
-
Устанавливаем программный пакет kivymd: pip3 install kivymd
-
Инструкция по установке 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
-
-
В терминале переходим в папку проекта (командой cd) и создаем файл настроек buildozer.spec командой: buildozer init
-
Поскольку, мы используем пакет kivymd, то его необходимо добавить в файл buildozer.spec. Для этого в файле buildozer.spec находим строчку requirements = python3,kivy и через запятую добавляем kivymd. Если вы используете какие-либо другие программные пакеты, то их тоже прописывайте (это нужно не всегда, иногда работает без добавления).
-
Если в приложений вам нужен доступ к интеренету, то в файле buildozer.spec находим строчку android.permissions = … и пишем INTERNET
-
Выполняем команду: buildozer android clean
-
Выполняем команду: buildozer android debug. Ждем когда будет готов *.apk файл. Первый раз компиляция занимает много времени.
-
Копируем готовый *.apk файл на телефон и устанавливаем приложение (возможно, на телефоне нужно будет включить «Режим разработчика» (см. ниже))
Как правило, установка необходимых пакетов, запуск приложения в среде разработки (например в PyCharm), компиляция *.apk файла и установка приложения на сам телефон проходят без проблем.
Проблемы начинаются при запуске приложения на телефоне. Запускаем приложение — а оно не запускается. Почему? Не понятно. В интернете можно найти много решений, связанных с
установкой различных версий kivy, kivymd и buildozer’а. Мне это не помогло.
Второй раздел
Чтобы понять почему приложение не запускается, лучше всего запустить его в режиме отладки с помощью программного пакета adb.
Весь процесс как это сделать можно посмотреть здесь.
Основные моменты из инструкции:
-
В файле buildozer.spec находим строчку p4a.branch и вместо master пишем develop
-
Устанавливаем программный пакет adb: sudo apt install adb
-
Выполняем следующие настройки в телефоне (на примере Redmi Note 9):
3.1 Устанавливаем телефон в «Режим разработчика». Для этого заходим в «Настройки» -> «О телефоне» -> «Версия MIUI» (Нажимаем с задержкой четыре раза подряд). Должно выйти сообщение «Вы стали разработчиком»
3.2 Заходим в «Расширенные настройки» -> «Для разработчиков» и включаем следующие опции:
-
«Не выключать экран»
-
«Отладка по USB»
-
«Установка через USB». Очень удобно не копировать *.apk файл, а установить напрямую через USB
-
«Отладка по USB (Настройки безопасности)»
-
-
В терминале вводим команду: adb devices. В строчке List of devices attached должно отобразится ваше телефон-устройство
-
В терминале переходим в папку bin (командой cd bin/). В папке bin должен находиться наш *.apk файл. Установим приложение на телефон используя команду: adb -s name_device install *.apk. Где name_device имя телефон-устройства из п.4, *.apk — полное название apk файла. Также есть очень полезная команда: buildozer android debug deploy run. Она скомпилирует *.apk файл, сама установит приложение на телефон и сразу запустит его. Команда запускается в папке проекта.
-
Теперь вводим команду для отладки: adb -s name_device logcat *:S python:D. Дальше программный пакет adb будет ожидать вашего запуска приложения на телефоне. В терминале вы сможете увидеть всю трассировку запуска приложения и найти проблемные места (если они есть). Например, если не хвататет каких-то требований (requirements), то вы это увидите и сможете прописать их в файле buildozer.spec в строчке requirements.
Все действия, описанные в данной статье, я проделал на Ubuntu 22.04 (64bit). Все установилось и заработало без проблем. Надеюсь, данная статья будет для вас полезной.
Какие могут быть проблемы
-
На данный момент приложения с использованием kivymd версий 1.1.1 могут не работать на некоторых телефонах (например Xiaomi 12 Lite и некоторых моделях POCO). По информации из интернета, это связано с изменениями в последней версии OpenGL и изменениями в версиях sdl. Чтобы обеспечить максимальную совместимость со всеми мобильными устройствами, необходимо использовать версию kivymd 1.0.2 с kivy 2.1.0. В файле buildozer.spec пропишите следующее:
requirements = python3,kivy==2.1.0,kivymd==1.0.2,sdl2_ttf==2.0.15, pillow
Есть надежда, что с выходом официальной версий kivymd 1.2.0 данная проблема будет решена, поскольку по возможностям версия kivymd 1.0.2 уступает версий 1.1.1.
-
Также, бывает что по какой-то причине при полной компиляций (после выполнения команды buildozer android clean) не удается клонировать необходимые файлы из github. Например, в окне трассировки появляется сообщение типа: error: RPC failed; curl 18 transfer closed with outstanding read data remaining Как можно решить эту проблему. Когда выполняется клонирование с github с параметрами по умолчанию, то клонируется полная история коммитов. В большинстве случаев это не нужно. Используя параметр —depth=1? будет выполнено клонирование только одного коммита с конкретной ветки. Данный параметр нужно добавить в файл download.sh, который создается при компиляций и лежит в ../PycharmProjects/pythonProject/.buildozer/android/platform/build-arm64-v8a_armeabi-v7a/dists. Внутри файла к команде git clone нужно добавить параметр —depth=1. Как это выглядит у меня после добавления —depth=1:
git clone —depth=1 $url $path -b $branch —recursive
ссылка на оригинал статьи https://habr.com/ru/articles/781844/
Добавить комментарий