Изначально статья задумывалась как пошаговая инструкция о том как с нуля сделать приложение – тайм-менеджер, своеобразный помощник для мониторинга впустую потраченного времени за использованием смартфона. Выбор был между 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, сборка бульдозером делается стандартно.
Автор: весёлый усач