Android studio python kivy

Приложение на python kivy для разнообразия рациона питания. От кода и до получения .apk файла для Android


Изучаю python kivy и для себя решил написал маленькое приложение, чтобы разнообразить свое питание. Решил поделиться. Статья рассчитана на новичков в kivy. Приложение занимает около 100 строк кода.

Цель создания велосипеда приложения:

  1. Избежать частых повторений в питании. Чтобы не употреблять одно и то же блюдо слишком часто.
  2. Не забывать блюда, которые ел, потом забыл и годами к ним не возвращался, потому что банально не помнил. У меня такое бывает.

Интро

Можно не читать, в интро всякая лирика.

Пришлось пожить в одной стране, в одной гостинице, где кормили ежедневно яйцами на завтрак и больше ничем, так через месяц начал чесаться. Обращался за медицинской помощью, хотя раньше никогда ничем подобным не страдал. Наученный горьким опытом после этого для себя решил допускать как можно меньше повторений в еде, чтобы ничего не успевало в организме накопиться. Это мой личный опыт, я просто рассказываю, без навязывания. Возможно, нет правил без исключения, наверное, овсянку можно есть и каждый день на протяжении десятков лет.

Скриншоты

Предположим мой рацион состоит из 50 блюд. Например, сегодня ел омлет. Нажимаю на кнопку, и омлет стал на 50 строку в очереди, а перед ним стоят 49 блюд, которые съем, чтобы опять добраться до омлета. Вот и вся логика приложения. (На скриншотах блюда нагенеренные, все совпадения случайны, к моему реальному рациону отношения не имеющие).

Исходный код и пояснения

Я сознательно не использовал kv файлы, так как код дан в учебных целях, для людей, которые знакомы с python. Все написано на голом python. В пояснениях я не буду останавливаться на объяснении python кода, а сразу перейду к специфическим фишкам Kivy.

  • Класс отвечает за запуск стартовой странички приложения, его можно назвать как угодно, например StartScreen. И наследует kivy модуль Screen. Приложение состоит из 3-х окон, вот эти окошки и создаются с помощью этого модуля
  • BoxLayout делит экран на равные части, по умолчанию горизонтально, я написал orientation=’vertical’, чтобы делить вертикально
  • Button — создает кнопки, в on_press задается, какая функция будет запущена при нажатии.
  • — добавляет кнопки в слои и в окна
  • Grid Layout чем-то напоминает тег table в html, указывается cols — кол-во колонок или rows — кол-во строк.

Можно указывать оба параметра или один параметр.
Экран будет разделен на нужное кол-во отсеков.

  • RecycleView — модуль, с помощью которого создается вертикальная прокрутка в моем приложении. Особенность RecycleView в том, что он строит скролы с элементами одинаковой ширины и высоты. И работает быстро. А есть модуль ScrollView, он может строить прокрутки с элементами разных размеров, но работает медленнее, чем RecycleView
  • — в коде часто встречаются такие строки. Я просто в качестве хранилища данных использовал родное хранилище Config kivy. Ну, пусть будет несколько тысяч блюд, нет смысла городить огород с sqlite и чем-то подобным. Все данные хранятся в одном файлике. Хранится этот файлик в той же папке, что и само приложение, если указать self.directory как в моем коде, но можно указать self.user_data_dir, чтобы этот файлик не уничтожался при перестановке или обновлениях.
  • Запуск на windows & linux & macos

    Принцип для всех операционок одинаковый:

    1. Ставим python3
    2. Ставим kivy
    3. Создаем файл main.py и втыкаем в него целиком вышеуказанный код
    4. Запускаем командой

    Программа должна заработать.

    Сборка apk файла и запуск на телефоне с андроид

    Итак, у нас есть файл с кодом программы, написанный на python. Как теперь создать приложение, чтобы его можно было запустить на телефоне с андроидом? Раньше это был достаточно мудреный процесс, требующий навыков и танцев с бубном. Теперь это не проблема.
    Вот пошаговая инструкция:

    1. Скачиваем готовую виртуальную машину от разработчиков kivy, в которой уже все настроено. https://github.com/Zen-CODE/kivybits/tree/master/KivyCompleteVM. Пароль: kivy
    2. Запускаем ее в Virtual Box.
    3. Открываем терминал и вводим следующие команды:
  • Последняя команда создает папку bin в той же директории, в bin вы найдете файл foodoptions-0.1-debug.apk, который можно закинуть на телефон, установить и наслаждаться приложением
  • Как закинуть apk файл на телефон?

    Можно, конечно, сделать это как угодно, отправить себе по почте, куда-нибудь выложить, закинуть в телеграмм и т.д., а потом скачать приложение на телефон.

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

    После установки заходим в папку bin и вводим команду

    И можно примерно через минутку увидеть на телефоне приложение после того, как увидим
    Success в консоли.

    Если вдруг приложение падает или ведет себя не так, как ожидалось, то есть вот такая команда для просмотра ошибок

    Русское имя приложения

    Если вы захотите, чтобы ваше приложение называлось по-русски, например, «Дневник питания», то надо внести изменения в файл:

    В тег appName прописывается русское название приложения, эта папка создается после первого запуска buildozer android debug. После того как файл отредактируете, вернитесь назад в папку FoodOptions и запустите buildozer android debug повторно. Файл соберется по-новой. После установки на телефон имя программы будет написано на русском.

    О файле buildozer.spec

    Вот мой файл с гитхаба: buildozer.spec
    Именно этот файл указывает buildozer-у, как именно собрать пакет.

    Там множество разных вариаций. Кому интересно, то введите внутри виртуалки команду:

    Будет создан дефолтный файл buildozer.spec с кучей комментариев и пояснений. Например, если вы хотите какую-нибудь свою иконку для приложения, то указываете в строке:

    свой файл с иконкой. И приложение соберется уже с вашей иконкой.

    Если вам надо подгрузить какой-нибудь специфический модуль, который не входит в официальную библиотеку python, то это делается в строке requirements =. В общем, рассказ о файле buildozer.spec может занять целую статью, а то и две.

    Загрузка приложения в Google Play

    Надо зарегаться, пройти все процедуры, получить ключи. И дальше запускать:

    Полученный файл apk-apkname-release.apk заливать в Google Play.

    Ссылки

    • Видео-уроки по kivy на русском языке. Лично мне понравились
    • Статьи на хабре про kivy от HeaTTheatR (и спасибо ему за помощь!)

    В принципе любой человек, который умеет программировать на python, сможет изменить приложение и легко добавить следующее:

    1. Добавить дизайн, чтобы приложение стало красивое
    2. Использовать kv-файлы, чтобы код стал более легким. Я бы привел такую аналогию: те кто знаком с веб-программированием, представьте себе код без html темплейтов и с html темплейтами. Вынос в kv-файлы кнопок, слоев и прочего — это что-то вроде jinja2 для веб-программиста. Логика остается в .py файлах, а фенечки — в kv-файлах.
    3. Добавить подсчет калорий, белка, углеводов, жиров (БЖУ)
    4. Добавить возможность фотографировать блюда

    Источник

    Kivy. Сборка пакетов под Android и никакой магии


    Во вчерашней статье Python в Mobile development, в которой речь шла о библиотеке KivyMD (коллекции виджетов в стиле Material Design для использования их в кроссплатформенном фреймворке Kivy), в комментариях меня попросили рассказать о процессе сборки пакета для платформы Android. Для многих этот процесс, к сожалению, был и остается чем-то из ряда магического шаманства и не подъёмным для новичков делом. Что ж, давайте разбираться, так ли на самом деле все сложно и действительно ли я маг и волшебник.

    Конечно, мог бы! Итак, вы написали свой код на Python и Kivy. Что нужно для того, чтобы это можно было запустить на Android устройствах? Перейдите в репозиторий KivyMD и вы увидите, что в этой инструкции уже давно прописаны шаги, которые позволят вам собрать APK пакет:

    1. Загрузите XUbuntu 18.04

    Установите Virtual Box на свой компьютер.
    Создайте новую виртуальную машину на основе загруженного образа XUbuntu
    Запустите виртуальную машину XUbuntu, откройте терминал и выполните нижеследующую команду:

    Все! Теперь у вас есть виртуальная машина для сборки APK пакетов для приложений Kivy! Что дальше? Давайте, собственно, займемся сборкой тестового приложения. Создайте в домашнем каталоге вашей виртуальной машины директорию TestKivyMD с пустым файлом main.py:


    Далее откройте файл main.py и напишите код нашего тестового приложения, которое будет использовать библиотеку KivyMD:

    Сохраните, откройте терминал в директории с файлом main.py и установите библиотеку KivyMD:

    После установки можно протестировать наш код:

    Результатом работы скрипта будет экран с Toolbar и одной кнопкой «Hello World»:


    Дальше нам нужно создать файл спецификации buildozer.spec, который должен располагаться в той же директории, что и файл main.py:


    Если вы не закрывали терминал (если терминал был закрыт, откройте его в директории TestKivyMD), введите команду:

    Эта команда создаст дефолтный файл спецификации. Откройте его и отредактируйте:

    Здесь все понятно поэтому дополнительные комментарии излишни. Почитайте внимательно дефолтную спецификацию, в ней можно указать путь к иконке, пресплеш при загрузке приложения и многое другое. Я оставил лишь то, что нам сейчас нужно для сборки нашего тестового пакета. И, собственно, запускаем процесс сборки командой в терминале:

    Можете смело идти на кухню и заваривать кофе, потому что в первый раз процесс загрузки и компиляции библиотек займет очень много времени. Все последующие сборки проходят за 10-20 секунд.

    Кофе выпит и самое время заглянуть в терминал:


    Вуаля! Наше приложение построено! Самое время закинуть его на смартфон и запустить:


    Все работает! И оказывается не все так сложно, как казалось.

    Также меня спрашивали:


    Ни у Flutter ни у React Native нет преимуществ перед языком разметки Kivy Language, которая позволяет создавать и позиционировать лайоуты и виджеты. Как по мне, то, как строится UI во Flutter — это самое настоящее извращение. Придумать это мог только больной на голову человек. Чтобы не быть голословным, давайте посмотрим на код Flutter и код Kivy одного и того же простейшего приложения… Выглядеть оно будет следующим образом:


    Ниже я привожу код из статьи Про Flutter, кратко: Основы:

    А вот абсолютно тоже самое, но с использованием Kivy и KivyMD:

    По-моему, вывод очевиден и не нуждается в моем комментировании…

    Надеюсь, был вам полезен. Оставляю опрос на тему «Удалось ли вам построить приложение для Андроид».

    Источник

    Kivy on Android¶

    You can run Kivy applications on Android, on (more or less) any device with OpenGL ES 2.0 (Android 2.2 minimum). This is standard on modern devices; Google reports the requirement is met by 99.9% of devices.

    Kivy APKs are normal Android apps that you can distribute like any other, including on stores like the Play store. They behave properly when paused or restarted, may utilise Android services and have access to most of the normal java API as described below.

    Follow the instructions below to learn how to package your app for Android , debug your code on the device , and use Android APIs such as for vibration and reading sensors.

    Package for Android¶

    The Kivy project provides all the necessary tools to package your app on Android, including building your own standalone APK that may be distributed on a market like the Play store. This is covered fully in the Create a package for Android documentation.

    Debugging your application on the Android platform¶

    You can view the normal output of your code (stdout, stderr), as well as the normal Kivy logs, through the Android logcat stream. This is accessed through adb, provided by the Android SDK. You may need to enable adb in your device’s developer options, then connect your device to your computer and run:

    You’ll see all the logs including your stdout/stderr and Kivy logger.

    If you packaged your app with Buildozer, the adb tool may not be in your $PATH and the above command may not work. You can instead run:

    to run the version installed by Buildozer, or find the SDK tools at $HOME/.buildozer/android/platform .

    You can also run and debug your application using the Kivy Launcher. If you run your application this way, you will find log files inside the “/.kivy/logs” sub-folder within your application folder.

    Using Android APIs¶

    Although Kivy is a Python framework, the Kivy project maintains tools to easily use the normal java APIs, for everything from vibration to sensors to sending messages through SMS or email.

    For new users, we recommend using Plyer . For more advanced access or for APIs not currently wrapped, you can use Pyjnius directly. Kivy also supplies an android module for basic Android functionality.

    User contributed Android code and examples are available on the Kivy wiki.

    Plyer¶

    Plyer is a pythonic, platform-independent API to use features commonly found on various platforms, particularly mobile ones. The idea is that your app can call simply call a Plyer function, such as to present a notification to the user, and Plyer will take care of doing so in the right way regardless of the platform or operating system. Internally, Plyer uses Pyjnius (on Android), Pyobjus (on iOS) and some platform specific APIs on desktop platforms.

    For instance, the following code would make your Android device vibrate, or raise a NotImplementedError that you can handle appropriately on other platforms such as desktops that don’t have appropriate hardware::

    Plyer’s list of supported APIs is growing quite quickly, you can see the full list in the Plyer README.

    Pyjnius¶

    Pyjnius is a Python module that lets you access java classes directly from Python, automatically converting arguments to the right type, and letting you easily convert the java results to Python.

    Pyjnius can be obtained from github, and has its own documentation.

    Here is a simple example showing Pyjnius’ ability to access the normal Android vibration API, the same result of the plyer code above:

    This code directly follows the java API functions to call the vibrator, with Pyjnius automatically translating the api to Python code and our calls back to the equivalent java. It is much more verbose and java-like than Plyer’s version, for no benefit in this case, though Plyer does not wrap every API available to Pyjnius.

    Pyjnius also has powerful abilities to implement java interfaces, which is important for wrapping some APIs, but these are not documented here — you can see Pyjnius’ own documentation.

    Android module¶

    Python-for-android includes a python module (actually cython wrapping java) to access a limited set of Android APIs. This has been largely superseded by the more flexible Pyjnius and Plyer as above, but may still occasionally be useful. The available functions are given in the python-for-android documentation.

    This includes code for billing/IAP and creating/accessing Android services, which is not yet available in the other tools above.

    Status of the Project and Tested Devices¶

    These sections previously described the existence of Kivy’s Android build tools, with their limitations and some devices that were known to work.

    The Android tools are now quite stable, and should work with practically any device; our minimum requirements are OpenGL ES 2.0 and Android 2.2. These are very common now — Kivy has even been run on an Android smartwatch!

    A current technical limitation is that the Android build tools compile only ARM APKs, which will not run on Android devices with x86 processors (these are currently rare). This should be added soon.

    As Kivy works fine on most devices, the list of supported phones/tablets has been retired — all Android devices are likely to work if they meet the conditions above.

    Источник

    Читайте также:  Папка libs android что это
    Оцените статью