Реализация android-приложения на python: Kivy + KivyMD

в 15:28, , рубрики: python, Разработка под android

Изначально статья задумывалась как пошаговая инструкция о том как с нуля сделать приложение – тайм-менеджер, своеобразный помощник для мониторинга впустую потраченного времени за использованием смартфона. Выбор был между React-Native (т.к. уже имелся опыт работы с этим инструментом) и Kivy (т.к. имелся опыт работы на python).

Однако в процессе реализации возникло множество проблем (или просто некоторые проблемы). Поэтому в данной статье будет описаны проблемы и пути их решения.

Выбор окружения

Версия языка была выбрана — python 3.6, однако, это оказалось ошибкой. Дело в том, что утилита python-for-android, возьмет ваш исходный код и соединить это все с версией интерпретатора 2.7. Конечно, в этом случае могут возникнуть проблемы при запуске приложения на смартфоне, которые отладить будет проблематично. Поэтому разработка должна вестись в второй версии питона.

Сборка

Вообще я попробовал собрать двумя способами – непосредственно при помощи python-for-android и buildozer. Однако, советую собирать через buildozer. Есть, на мой взгляд, одна весомая причина — SDK и NDK – он скачает автоматически.

Ну и приятным моментом для меня стало, что пакет собранный через buildozer весит чуть меньше – мелочь, а приятно.

Проблема со шрифтами

KiviMD содержит свои шрифты, чтобы шрифты попали в сборку необходимо добавить расширение в конфигурацию buildozer.spec:

source.include_exts = py,png,jpg,kv,atlas,ttf

Проблема с добавлением библиотек

Самая непонятная для меня проблема. Дело в том, что KivyMD скачивается через git и добавляется в ваш проект в виде библиотеки. Других способов, насколько мне известно, нет.
Чтобы не плодить лишних папок я создал директорию vendor и в нее положил папку kivimd – предварительно, изменив пути импорта – все это заработало на десктопе.

Однако смартфон категорически отказывался запускать программу, мотивируя это тем, что в папке vendor отсутствует библиотека kivimd

Проблема с цветом

Казалось бы самая незначительная проблема, но на нее я потратил кучу времени. Изначально я писал на python3 и указывал цвет текста в формате rgb (т.е. три значения без прозрачности). Когда я перевел все на python2 – весь текст исчез. Оказалось, что цвет теперь нужно указывать в формате rgba (т.е. четыре значения, последнее – прозрачность).

Проблема сборки с buildozer

Сборка выдавала ошибку. Сама ошибка и решение описаны здесь.

Конечно, я понимаю, что это временная проблема и в дальнейшем будет исправлена, но все же.

Отладка

Изначально я вводил команды adb logcat – и видел кучу логов, сыпавшихся с моего телефона.
Оказалось выход прост — adb logcat | grep python. Выдаст только ошибки интерпретатора, т.к. больше я все равно ничего не смогу поправить – таким образом я отфильтровал лишнее.

Зависимости

Нужно учитывать версию Cython и kivy – иначе последний не установится. Для нуждающихся версии прописаны в requirements.txt в репозитории, ссылка на который находится ниже.

Итоги

На это небольшое приложение у меня ушло три дня (в общей сложности часов 15). Я столкнулся с кучей неочевидностей. Конечно, такие вот неочевидности, могут быть вполне очевидны для многих, но может быть помогут таким немногим как я.

В итоге приложение весит 8.6 МБ, работает довольно стабильно (но там и нет никакого функционала).

Ссылка на репозиторий

В репозитории есть файл build.sh – это пример команды сборки для python-for-android, сборка бульдозером делается стандартно.

Автор: весёлый усач

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js