Pull to refresh

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

Изначально статья задумывалась как пошаговая инструкция о том как с нуля сделать приложение – тайм-менеджер, своеобразный помощник для мониторинга впустую потраченного времени за использованием смартфона. Выбор был между 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, сборка бульдозером делается стандартно.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.