Python в Mobile development



    Ни для кого не секрет, что область применения Python довольно широка: начиная от web-технологий, игровой индустрии и заканчивая проектами NASA. Python работает практически везде: от карманных компьютеров и смартфонов до серверов сети и практически на всех известных платформах, таких как Windows, Linux/UNIX, macOS, Palm OS, Raspberry PI и так далее. Благодаря фреймворку Kivy в 2011 году Python освоил и мобильные платформы в плане разработки приложений под iOS и Android, а в 2015 с помощью библиотеки KivyMD Python научился использовать Material Design.

    Библиотека KivyMD — это коллекция виджетов в стиле Material Design, для использования их в кроссплатформенном фреймворке Kivy. В своей предыдущей статье KivyMD — жизнь продолжается, которая была выпущена год назад, я уже рассказывал о форке этой библиотеки, но в issues и в почту часто получал уведомления о том, что заявленые в форке возможности отсутствуют при установке KivyMD из PyPi. И это было действительно так, потому что в PyPi находилась старая версия библиотеки четырехлетней давности из репозитория на GitLab, которая уже не поддерживается автором и, поскольку мы не хотели использовать для своего форка новое имя, типа KivyMD-fork и загружать пакет в PyPi с таким названием, было решено написать автору KivyMD Andrés Rodríguez (@mixedCase_) и попросить его удалить свой пакет. После не долгих переговоров Андре дал нам инвайт в Python Package при условии, что он останется соавтором библиотеки. Так что теперь официальный репозиторий библиотеки находится здесь, а в PyPi доступны самые свежие наши обновления.

    Итак, какие изменения в библиотеке произошли спустя год? Благодаря тем людям, которые используют KivyMD в своих проектах, мы устранили довольно много ошибок. Сейчас в репозитории 81 закрытый вопрос. Это если не учитывать того, что львиная доля вопросов решается в Discord онлайн чате поддержки пользователей. В нем существует как русскоязычный так и англоязычный разделы. На данный момент реализованы не все спецификации Material Design, потому что над библиотекой работают практически два человека в свободное от работы время. То, что уже реализовано и то, что хотелось бы реализовать можно посмотреть в этом списке. Он далеко не полный, но вы можете его дополнить, так как доступ на редактирование открыт для всех. Вот несколько новых виджетов:

    Tooltip


    Material Design Tooltip

    пример кода
    from kivy.lang import Builder
    from kivy.factory import Factory
    
    from kivymd.app import MDApp
    
    Builder.load_string('''
    #:import random random
    #:import hex_colormap kivy.utils.hex_colormap
    #:import get_color_from_hex kivy.utils.get_color_from_hex
    #:import md_icons kivymd.icon_definitions.md_icons
    
    #:set ICONS list(md_icons.keys())
    
    
    <IconButtonTooltips@MDIconButton+MDTooltip>
    
    
    <ExampleTooltips@BoxLayout>
        orientation: 'vertical'
    
        MDToolbar:
            title: "Example Tooltips"
            md_bg_color: get_color_from_hex(hex_colormap["crimson"])
            elevation: 10
            left_action_items: [['dots-vertical', lambda x: None]]
            tooltip_text: "MDToolbar"
    
        Screen:
    
            BoxLayout:
                size_hint: None, None
                size: self.minimum_size
                padding: "10dp"
                spacing: "10dp"
                pos_hint: {'center_x': .5, "center_y": .9}
    
                IconButtonTooltips:
                    icon: random.choice(ICONS)
                    tooltip_text: "MDIconButton"
                IconButtonTooltips:
                    icon: random.choice(ICONS)
                    tooltip_text: "MDIconButton"
                IconButtonTooltips:
                    icon: random.choice(ICONS)
                    tooltip_text: "MDIconButton"
                IconButtonTooltips:
                    icon: random.choice(ICONS)
                    tooltip_text: "MDIconButton"
                IconButtonTooltips:
                    icon: random.choice(ICONS)
                    tooltip_text: "MDIconButton"
                IconButtonTooltips:
                    icon: random.choice(ICONS)
                    tooltip_text: "MDIconButton"
    ''')
    
    
    class Test(MDApp):
        def build(self):
            return Factory.ExampleTooltips()
    
    
    Test().run()
    



    * пример работы на Mac OS



    Bottom App Bar


    Material Design Bottom App Bar

    Слева — пример работы Bottom App Bar из демо приложения Flutter, справа — демонстрация Bottom App Bar библиотеки KivyMD.

    пример кода
    from kivy.factory import Factory
    
    from kivymd.app import MDApp
    from kivy.lang import Builder
    
    
    Builder.load_string(
        """
    <BottomAppBar@Screen>
    
        BoxLayout:
            spacing: dp(10)
            orientation: 'vertical'
    
            MDToolbar:
                title: "Title"
                md_bg_color: app.theme_cls.primary_color
                left_action_items: [['menu', lambda x: x]]
    
            Widget:
    
            MDBottomAppBar
    
                MDToolbar:
                    title: "Title"
                    icon: "git"
                    type: "bottom"
                    left_action_items: [["menu", lambda x: x]]
    """
    )
    
    
    class BottomAppBarTest(MDApp):
    
        def build(self):
            return Factory.BottomAppBar()
    
    
    BottomAppBarTest().run()
    


    Backdropr


    Material Design Backdropr

    Слева — пример работы Backdropr из демо приложения Flutter, справа — демонстрация Backdropr библиотеки KivyMD.

    Также мы добавили в библиотеке раздел Studies в котором будем размещать демонстрационные приложения, такие как Shrine, Basil и другие. Пока можно посмотреть, как выглядит приложение Shrine:


    А вот тоже самое, но из приложения на Flutter:


    Так KivyMD выглядит на Android устройствах. В некоторых местах есть, конечно, проблемы с производительностью, но это касается, скорее самого Kivy. Например, все еще есть проблемы со стартом «тяжелых» библиотек. На нижеследующем видео я привел пример приложения использующего OpenCV в качестве бекенда к Android камере:


    В конкретно этом случае уже ничего поделать нельзя, потому что при старте подгружаются не только OpenCV и NumPy, но еще и происходят нативные вызовы для того, чтобы все это связать. Однако грамотно спроектированное мобильное приложение на Kivy и KivyMD стартует довольно быстро. Все это касается мобильных платформ. На десктопе таких проблем нет и KivyMD выглядит там просто шикарно:

    Mac OS:


    Windows:


    В принципе, не имеет значения на какой OS все это будет работать, потому что KivyMD, как и Kivy везде выглядит одинаково. Вы сами должны решать, какой вид будет у вашего приложения и я считаю, что это только плюс.

    У нас очень много планов, но рук не хватает. Например, пока нет времени доработать файловый менеджер для десктопных систем, хотелось бы внедрить поддержку iOS виджетов и многое другое… Однако несмотря на все недостатки, количество скачиваний и интерес к библиотеке растет с каждым днем:


    Присоединяйтесь к сообществу, если вы любите Python также, как любим его мы!

    Канал на Youtube
    Новости KivyMD
    Discord чат
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 75

      +2

      Спасибо за статью. А не могли бы Вы написать детально о сборке приложения под Андроид?

        +3

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

          0

          Я пробовал бульдозером собирать приложение под Андроид на трёх разных платформах и двух разных ноутбуках, и всегда вылезали какие-то ошибки в процессе сборки.


          Долго гуглил ошибки, в итоге так понял, что на винде сборка вообще не работает, а про ту ошибку, которая вылезала у меня на маке contributor местный сказал что не знает как ее исправить.


          Так что это совершенно нетривиальная задача)

            +1

            Не буду обещать, но сегодня постараюсь написать о сборке пакета для Андроид.

              +1

              dockerfile в котором всё работает было бы идеально. А то у всех проблемы разные :)

                0

                Был. Удалили. У нас ним тоже были проблемы с Python3. Если у вас есть опыт, поделитесь с нами.

        0

        Всё таки Python не для мобилок. А тот же kivy собирать в APK и тестировать локально — та ещё боль.

          0

          Вы тестируете иначе?

            0

            Немного не это имел ввиду ;) Чтобы какой-нибудь Android Studio заюзать нужно много времени потратить. (имхо, может быть я такой криворукий :( )

              0
              Чтобы какой-нибудь Android Studio заюзать нужно много времени потратить

              Не понимаю, причем здесь Kivy и "та ещё боль"?

                0

                Как минимум скомпилировать в APK =) В мануале по которому я пытался сделать это, использовался Android Studio :thinking:
                Возможно я не прав, но их совместное использование — возможно.

                  0

                  Kivy не использует для компиляции APK Android Studio. И никогда не использовал.

                    0

                    Буду знать. Спасибо.

          0
          Чтобы какой-нибудь Android Studio заюзать нужно много времени потратить

          Не понимаю, причем здесь Kivy и "та ещё боль"?

            +2
            В принципе, не имеет значения на какой OS все это будет работать, потому что KivyMD, как и Kivy везде выглядит одинаково. Вы сами должны решать, какой вид будет у вашего приложения и я считаю, что это только плюс.

            Да и правда — в жопу гайдлайны и привычный UX, давайте фигачить свой колхоз везде.
              0

              А разве на Flutter не так? Там UI рендерится так же, как и в Kivy, я думал, что все это знают, на нет...

                0

                Не ни также у flutter используются нативные виджеты в отличие от kivy...

                  0

                  В kivy для отрисовки используется opengl соответственно при всем желании вы не получите виджеты нативного вида

                    0

                    А в приведнных роликах и гифках в статье вы наблюдаете не нативный вид?

                      0

                      По ios хочу увидеть...

                    +3

                    На самом деле, Flutter использует, если не подводит память, Skia, и все виджеты в нём рисуются этим движком. Тут Kivy концептуально не отличается. А вот ReactNative — напротив, работает с нативным компонентами, но имеет потери производительности из-за наличия Js <> Native бриджа.

                      +4
                      Flutter не использует нативные виджеты ни на одной из платформ. У Flutter свой canvas и движок для рендера в этом canvas. Вот официальная документация — flutter.dev/docs/resources/rendering#introduction
                        0

                        Так же и Kivy — использует для рендера UI SDL2 и OpenGL… Так что все заявления, типа " Kivy не подходит для мобильных платформ" с таким же успехом применяются и к Flutter!

                          0

                          Да, спасибо был не прав...

                    +2

                    Спасибо за вашу работу! То, что вы делаете — это прекрасно! Но хотелось бы понять две вещи: 1. является ли KivyMD "prodaction ready" (чтобы не переживать за баги в серьёзных приложениях для бизнеса) и 2. когда появится полноценный сайт с документацией? Раньше айтишники по способу усвоения информации делились на два типа — те, кто признают только книги и те, кто читают документацию с ПК. Теперь вот появился третий тип — те, кто учится по youtube роликам. Способ иногда более наглядный, но нет возможности скопировать фрагмент и запустить, а также в напечатанной документации быстрее найти нужный код. Понимаю, что это всё долго и больно, но Вы хотя бы рассматриваете в планах создание документации, мануалов и туториалов?

                      –2

                      Не думаю, что когда-либо на этом будут что-то более менее серьёзное делать. Для каждой платформы есть свой инструмент.

                        +1

                        Из минусов kivy — это только размер приложений. Обычно это примерно 20мб. Но сейчас это курам на смех. Из плюсов — любая либа на питон может быть использована в мобильном приложении. У меня был случпй: нужно было найти либы доя трубы, исты и спидтеста. На джаве я этого не нашёл, а вот на питоне — за 1 минуту все либы нашёл, потом внедрил в приложение

                          0

                          Про размер даже можете не заикаться, ибо посмотрите на размер приложений хотя бы на iOS.

                            0
                            Из минусов kivy — это только размер приложений.


                            И всё? Прямо даже удивительно слышать. Потому что когда я делал подход к снаряду несколько лет назад, тормозила эта штука в списках с сотней элементов как не в себя. Ну и собрать приложение было практически не реально — мне удалось только с использованием линукс-образа, предоставляемого разработчиками, и только один раз. После чего я поглядел на производительность, на внешний вид (KivyMD тогда уже был, но заставить его работать был тот ещё квест), на документацию, на то, что даже в доступном в гугл-маркете примере некоторые виджеты безбожно глючат (нереагирующая кнопка или пункт меню — милое дело), и пошёл ковырять Android Studio.
                              –2
                              тормозила эта штука в списках с сотней элементов как не в себя

                              Сейчас есть RecycleView, который за доли секунды обрабатывает миллионные списки.


                              собрать приложение было практически не реально

                              https://habr.com/ru/post/479236/


                              пошёл ковырять Android Studio

                              Идите, ковыряйте

                                +2
                                Идите, ковыряйте
                                Давайте без грубостей. Я вас не оскорблял, так что будьте любезны соблюдать минимум приличий хотя бы из практических соображений — мало что так подрывает усилия евангелиста, как откровенное хамство.
                                  0

                                  Покажите в каком месте я вас оскорбил?

                                    0
                                    См. цитату в предыдущем сообщении.
                                      0
                                      Да нет, он вас действительно не оскорблял. Но грубостью и хамством это назвать можно, да.
                                        0
                                        Ничего, он исправился. В смысле — усугубил.
                                          –1

                                          И самое интересное, что мне плевать! На таких, как ты — плевать. А вот тебе бы в чатик заскачить, у школьников троллингу поучиться.

                                        –2

                                        Вы написали, что идете ковырять Студию! Я ответил — "Идите ковыряйте!" Где оскорбление? У доктора давно были? Судя по вашей карме — человек вы с гнильцой!

                                          +2
                                          Там прямо написано «несколько лет назад», т.е., прямо сейчас я, никуда идти не собирался. Но вам захотелось нахамить, и вы нахамили, поскольку вы узрели еретика, относящегося к продвигаемой вами технологии без подобающего восторга. Теперь начинается «а чо такого». Но тут есть даже положительный момент — вы напомнили мне о ещё об одном минусе kivy: крайне токсичное комьюнити. Никакой критики не воспринимают, их надо строго по шерсти. Я как-то наблюдал у них в группе дискуссию по поводу сломавшего всё и вся релиза — сплошное «it's free so developers owe you nothing». Имеет смысл учитывать этот момент.
                                          Судя по вашей карме — человек вы с гнильцой!
                                          В гранит!
                                            –2

                                            Мальчик, иди поплачь в чате "никчёмные тролли". Твое рукамашество и ногодрыжество лично меня никоим образом не задевает! Так что подбери слюни с пола!

                                              –2

                                              Это какой нужно быть паскудой, чтобы при отсутствии статей и всего лишь при наличии духста комментариев заработать отрицательную карму?! Да ты прям образец вежливого человека!

                                                +1
                                                Юра, прекрати мудацкое неадекватное поведение. Ты своим хамством и безосновательным наездом портишь репутацию не себе, а проекту.
                                              0

                                              Уважаемый, минусиков в карму тут можно наловить усомнившись в непогрешимости Илона Маска например. И это ника не будет зависеть ни от гнильцы, ни от профподготовки. А вам бы успокоиться сейчас.

                                                0

                                                Очень странное совпадение, что у вас троих красная карма, нет! Впрочем, мне-то дела нет до ваших сомнений.

                                                  0

                                                  Прикольно, а я оказывается когда-то плюсанул тебе в карму)

                                                    0

                                                    И на том спасибо!

                                                      0

                                                      Да не за что, хорошее дела делаешь, нервишки только подлечи)

                                      0

                                      Да, действительно — и всё. Я собираю приложение на специальной виртуальной машине, предоставленной один из участников сообщества. Показывал первую версию программы широкому кругу лиц в живую. Процесс стал намного проще, чем в Android Stuido. Я тоже слышал страшные истории про бульдозер, киви и извращенцев, собирающих мобилки на питоне. В 2019 году — это всё неправда. Огромнейший плюс подобного подхода — возможность затащить в мобильное приложение ЛЮБУЮ библиотеку на питоне для любых целей, а спектр этих либ и задач намного шире, чем у джавы и даже джаваскрипт. Так что действительно нашёл всего один минус — размер приложения, но 20 МБ по сегодняшним меркам — это не критично))

                                        0
                                        Да, действительно — и всё.
                                        При этом вы задаёте такие вот вопросы:
                                        1. является ли KivyMD «prodaction ready» (чтобы не переживать за баги в серьёзных приложениях для бизнеса) и 2. когда появится полноценный сайт с документацией?
                                          0

                                          Я не понимаю, что смущает в 20 МБ? На iOS приложения и до 80 МБ вытягивают.

                                            0
                                            А на андроиде флаттер за 3-4 мегабайта ругают. Текущее приложение над которым с коллегой работаем весит 10-11 мегабайт, и до 20 распухать пока что не планирует.
                                              0

                                              image

                                                0
                                                И что это должно было показать?
                                                  0

                                                  То, что размер 20 МБ у приложения Kivy — это не нонсенс.

                                            0
                                            К моему большому сожалению, основные задачи на мобилках это UI, а с ним у питона все же хуже. Под натив можно почти на любой чих в UI заскоках библиотеку найти.
                                              0
                                              а с ним у питона все же хуже

                                              Например?

                                                0
                                                Зайдите на android arsenal, material.io, полистайте гитхаб — библиотек с разными кастомными вью уже десятки, возможно и сотни, тысяч, да что уж там, думаю со временем доделать один свой эксперимент и еще +1 в эту копилку закинуть, даже с учетом что он не нужен даже мне, но мало ли, пусть будет. Питон все же исторически не про разработку UI, и людей над этим в нем работает меньше.
                                                  0

                                                  И тем не менее, PyQt, wxPython, Kivy, Tkinter существуют и никто бросать их не собирается.

                                      0

                                      Рассматривали, конечно. Что-то уже начали делать, но, опять же времени на все и сразу не хватает. В репозитории KivyMD есть раздел wiki. Это, конечно, не сайт с документацией, но там очень много примеров использования с демонстрацией работы. Есть плей-лист на YouTube с уроками по KivyMD, на домашней странице нашего проекта много полезных ссылок. Что касается ошибок… Все критичные ошибки уже исправлены.

                                      0
                                      Сравнение с Flutter это прям плюс.
                                      Но в статье не увидел такой важный момент, а как строится в KivyMD разметка виджетов?

                                      Например, как по мне, если сравнивать тот же Flutter с React Native, то одно из преимуществ в виджетах Row, Column с определением стиля позиционирования потомков через параметры виджета, по сравнению с Flex-разметкой в CSS-стилях. Упрощает построение составных виджетов.

                                      Какой подход в KivyMD?
                                        0

                                        Разве вы не смотрели под спойлеры? Там приведен код того, что показано на экране.

                                          0
                                          Конечно, посмотрел, отсюда и вопрос. И вопрос, не в языке разметки, а в том, что можно им сделать.
                                          Фишки flex'а и разметки в fluter — это удобное позиционирование элементов главной и поперечной оси.

                                          Т.е., вместо вопроса на вопрос можно было бы просто ответить, какой подход, flexbox или grid или что-то ещё.
                                        0
                                        Интересно, превый раз слышу про такой фреймворк. Как я понимаю, Python-код не конвертируется в Java или Objective-C/Swift и исполняется через интерпретатор?
                                          0

                                          Чистый Python!

                                            0
                                            Однако, если Kivy написан на Python, то на Андроид устройствах будет выполняться байт-код Java?
                                              0

                                              Нет. Будет выполняться байт-код Python.

                                            +1
                                            Интересно, превый раз слышу про такой фреймворке

                                            Это очень странно, потому что Kivy старше React Native и Xamarin!
                                            У первого и у второго богатые папиньки в виде Facebook и Microsoft. Миллионные бюджеты и разрекламированная популярность. У Kivy — 10 000 долларов в год на плату коре-разработчикам фреймворка. Плюс поддержка пользователей. То есть, тупо на добровольных началах. И это уже сейчас затыкает за пояс и Flutter, и ReactNative и Xamarin! Если бы у Kivy был спонсор в виде такого папеньки, как FaceBook, вы бы сейчас и не знали, что такое ReactNative!

                                              +2

                                              Ну вот так и происходит. Не всегда хорошие технологии популярны, просто потому что нет рекламы.

                                            0
                                            Да, не очень понятно, с чего Гугл сделал ставку на Котлин, вместо того, чтобы развивать питон
                                              0
                                              Всё к чему прикасается гугл, превращается… (можете продолжить сами). То, что они пытались делать на питоне, выглядит, как попытка «превратить его в Java».
                                                0

                                                Насколько я помню, питон стал популярным как раз с подачи Гугла, когда они стали его интенсивно использовать у себя на сервер- сайде

                                              0
                                              Собственно сайт kivy.org не работает
                                                0

                                                Работает. Но попал под блокировку Роскомнадзора. VPN в помощь. Хотя у нас в Луганске, например, он спокойно себе работает без всяких VPV:
                                                image

                                                  0

                                                  Зависит от провайдера. Действительно — у некоторых людей сайт www.kivy.org не открывается. Один мой коллега на вопрос "Почему больше не пользуешься kivy?" ответил как раз, что не пользуется по причине заблокированного сайта, однако он был сильно удивлён, когда я при нём же открыл сайт в рабочем браузере. Но тоже знаю людей, которые до сих пор жалуются на заблокированный сайт.

                                                    0
                                                    Хм. Ок. Спасибо. Не подумал, что может быть заблокирован. Интересна причина блокировки канеш…

                                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                Самое читаемое