По-быстрому слепить Android-приложение на Python (Kivy?). Стоит ли?
Прошу совета по выбору языка/фреймворка для разработки для андроид-приложения с GUI.
Надо сваять приложение под андроид-планшет, чтобы превратить этот планшет в мобильный пульт оператора для управления и сбора данных с некоторой промышленной железки.
Функциональность такая примерно:
- связь с самой железкой через последовательный порт через ZigBee-модем;
- GUI для оператора со всякими кнопочками и картинками;
- обработка, данных, полученных от железки, хранение их в БД;
- уметь нарисовать отчет с цифрами и картинками, чтобы его можно было куда-то потом передать из устройства и напечатать на принтере.
Данных мало, математика довольно простая, здесь все просто. (Хотя и не худо было бы что-то типа numpy подключить).
Я не программист, у меня есть только небольшой успешный опыт программирования подобных штук на PC, там это идеально решается с помощью Python + еще ReportLab позволяет быстро клепать отчеты сразу в pdf. С мобильными устройствами опыта нет совсем, поэтому первая мысль была - попробовать снова все сделать на Python. Немного почитав на эту тему, пришел к выводу, что для того, чтобы разрабатывать полноценное на вид приложение под Android на Python есть только одно более менее популярное решение - это Kivy. (Есть и еще пара нишевых решений типа PyBee, но они пока слабо проработаны и на них не стоит закладываться).
Т.о. есть два варианта:
1) Kivy;
2) использовать родную для андроида Java, которую еще надо изучить. Боюсь не успеть.
Кроме того, не понял пока можно ли будет прикрутить к Kivy какую-то библиотеку для рисования pdf. Может быть, в итоге проще будет все на Java реализовать.
Может быть, вы уже решали подобную задачу? Что посоветуете?
SmInc, Вы абсолютно правы, очень вероятно, что так и получится. Это еще хорошо, если "поменять планы" на правильный хватит ума на старте проекта, избежав лишних трудозатрат.
Kivy довольно простой инструмент для создания мобильного приложения. Насколько я читал, проблема больше в сборке бинарных пакетов для мобильные ОС. Для Android есть buildozer, с которым люди испытывают проблемы. В Хабре есть статья про его настройку
Мобильное приложение для управления - не сложная задача. Логика очевидно будет на сервере, а клиент можно сделать и на современных Javascript фреймвоках. Не зацикливайтесь на языках и технологиях, самое важное в сроках и качестве исполнения.
Не тратьте много времени на мелочи. Кроме минимального мобильного клиента и сервера, Вам не мало времени придется провести за проработкой протокола обмена, способе и виде хранения, оптимизации и отладке всего этого и т.д. Быстро создайте прототип, путь и не самый красивый, а позже украшательство можно внести.
Из практических советов: В мобильном клиенте можете сильно "затормозится" на реализации хороших графиков. Можно значительно упростить, если воспользоваться готовыми html виджетами. Для python есть довольно популярный Dash. В мобильном клиенте можно показывать через html контейнер.
При работе с железом хорошо бы использовать очередь в том или ином виде. Советую очень хорошую реализацию очереди на Python: dramatiq. Для крупного проекта RabbitMQ или NATS
Для создания сервера на Python очень рекомендую molten. Проект хоть и молодой, но стабильный и очень продуманный и современный. P.S. есть интеграция с dramatiq с коробки.
Самому приходилось писать на Python решение для умного дома, так что знаю о чем пишу.
Спасибо большое за советы! Есть один нюанс. Логика на сервере не планировалась, ибо веб-сервер как таковой не планировался вообще. Хотел об этом сразу написать, но забыл. Дело в том, что промышленная железка, с которой надо связываться - на базе контроллера stm32, код которой пишется на голом железе, протокол обмена между ними - самопальный, просто обмен посылками через последовательный порт. Впрочем, и логику приложения, я думаю, можно реализовать на Javascript-фреймворках и обойтись без сервера. В то же время, Вы меня натолкнули на мысль о том, не стоит ли действительно предусмотреть более мощное железо, чтобы на нем можно было и веб-сервер разместить. Может быть, так и проще будет. Но на данный момент такое ощущение, что это overkill
Я тут не давно тоже этим заинтересовался.
И нашел уже готовую виртуальную машину от разработчиков kivy, в которой все настроено и не надо валандаться ни с чем. Просто пишешь код внутри нее, создаешь файл buildozer.spec, набираешь в папке приложения buildozer android debug
или buildozer android release