Примеры программ на python для Андроид

Закрыт. Этот вопрос необходимо уточнить или дополнить подробностями. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.

Закрыт 6 лет назад .

Тратить огромное кол-во времени на изучение java, для написания простеньких бот-программ считаю не лучшим решением

Отслеживать
задан 28 авг 2016 в 18:16
369 1 1 золотой знак 7 7 серебряных знаков 16 16 бронзовых знаков

Вы можете найти множество материалов по данному вопросу в поисковиках по запросу «developing android apps with python». Это решение лучшим я не считаю, но если Вы так хотите.

28 авг 2016 в 18:22

Если интерфейс сложнее уведомлений нафиг не нужен, то посоветую Termux: даёт Debian-подобное окружение в терминале, позволяя сделать apt-get install python и дальше юзать его как в любом обычном линуксе (или макоси, благо одинаково)

28 авг 2016 в 23:12

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Лучшая Графическая (GUI) Библиотека Для Python | Tkinter VS WxPython VS PyQt(PySide) VS Kivy

Python-for-android Прежде всего давайте посмотрим на то, с помощью чего Python получает возможность работать под Android — инструмент, названный, как ни странно, python-for-android. Его основная функция состоит в том, чтобы создать дистрибутив — папку проекта, содержащую все необходимое для запуска вашего приложения. А точнее, сам интерпретатор, Kivy и библиотеки, от которых он зависит: Pygame, SDL и несколько других. Также дистрибутив включает в себя загрузчик Java, отображающий OpenGL и выступающий в качестве посредника между Kivy и операционной системой. Затем вы добавляете ко всему этому свои скрипты, настройки вроде иконки и имени, компилируете с помощью Android NDK и вуаля — APK с вашим приложением готов!

И это всего лишь базовая процедура, на самом деле сгенерированный пакетный файл может включать (и включает) в себя гораздо больше. Вместе со всем прочим в APK вшивается большая часть стандартной библиотеки, а любой сторонний модуль, написанный на Python, может быть легко добавлен — все так же, как и при разработке десктоп-приложений. Добавка модулей с компилируемыми компонентами тоже не вызывает трудностей, необходимо лишь указать, как их нужно собирать. Как правило, это не представляет собой ничего сложного, достаточно лишь поставить пару галочек перед запуском процедуры сборки, хотя в редких отдельных случаях могут понадобиться дополнительные действия. Python-for-android уже включает в себя указания для компиляции таких популярных модулей, как: numpy, sqlite3, twisted и даже django!

Вышеописанные принципы лишь в общих словах объясняют, как работает python-for-android. В любой момент вы можете получить больше информации на данную тему, заглянув в документацию Kivy. Я рекомендую вам Buildozer — надстройку для python-for-android, предоставляющую собой удобный интерфейс и автоматическое разрешение некоторых зависимостей. Мы стараемся сделать так, чтобы написанная выше цепочка действий использовалась не только в Kivy, но и в других проектах. Основной процесс сборки останется таким же, но нужда в загрузчике Java отпадет, так как он необходим только для поддержки некоторых специфичных нужд фреймворка.

Какие вещи реально пишут на Python?

Обращение к Android API с помощью PyJNIus Взаимодействие с Android API: получение информации с сенсоров, создание уведомлений, вибрация, пауза и перезапуск, да что угодно — важная часть вашего приложения. Kivy за вас позаботится об основном, но многими вещами вы захотите управлять сами. Для этого создан PyJNIus — инструмент, автоматически оборачивающий код на Java в интерфейс Python.

В качестве простого примера приведем программу, которая заставит телефон вибрировать на протяжении 10 секунд:

from jnius import autoclass # Для начала нам нужна ссылка на Java Activity, в которой # запущено приложение, она хранится в загрузчике Kivy PythonActivity PythonActivity = autoclass(‘org.renpy.android.PythonActivity’) activity = PythonActivity.mActivity Context = autoclass(‘android.content.Context’) vibrator = activity.getSystemService(Context.VIBRATOR_SERVICE) vibrator.vibrate(10000) # аргумент указывается в миллисекундах

Если вы знакомы с Android API, то без труда заметите, что код выше очень похож на аналогичный на Java — PyJNIus просто позволяет нам обращаться к тому же API, но прямо из Python. Большая часть Android API может быть вызвана подобным образом, что позволяет достичь того же функционала, что и при разработке на Java.

Главный минус PyJNIus в том, что он требует неплохого понимания структуры Android API, а код выходит громоздким, хотя его эквивалент на Java выглядит точно так же. Для решения этой проблемы Kivy включает в себя Plyer.

Plyer: кроссплатформенное API для платформоспецифичных задач Проект Plyer ставит себе цель создать простой «питоничный» интерфейс для функций, которые присутствуют на большинстве платформ. Например, код выше легким движением руки превращается в…

from plyer.vibrator import vibrate vibrate(10) # В Plyer аргументы указываются в секундах

Более того, написанный код попытается выполнить свою задачу на всех поддерживаемых Plyer платформах — на данный момент это: Android, iOS, Linux, Windows и OS X (для iOS также существует аналог PyJNIus, называемая PyOBJus). На самом деле, вибрация — не самый лучший пример, потому что сейчас она реализована только для Android, но такие функции как проверка уровня заряда батареи:

Читайте также:
Юмористические программы 90 х годов список

from plyer import battery; print(battery.status)
from plyer import tts; tts.speak(‘hello world’)

— работают как в десктопных, так и в мобильных приложениях, а получение данных с компаса/гироскопа и отправка SMS без проблем реализуются на Android и iOS.

Plyer находится на начальной стадии развития, так что любая помощь в разработке приветствуется. Также, мы участвуем с ним в Google Summer of Code в этом году.

Не только ради Kivy Все вышеперечисленные инструменты были разработаны для нашего фреймворка, но на самом деле они больше предназначены для разработки под Python в целом. В Plyer мы специально избегаем какой-либо зависимости от Kivy, а PyJNIus нужен лишь для доступа к Android JNI. Искренне надеемся, что эти инструменты станут полезны для любого, кто пишет на Python под Android. Вы уже можете попробовать PyJNIus, используя QPython. Python-for-android больше завязан на взаимодействии с Kivy, но мы будем рады обсудить этот вопрос.

Многое можно реализовать при разработке на Android с помощью Python, несмотря на все различия с Java, которая предназначена для этого, но эти возможности могут быть расширены еще больше в ближайшем будущем. И если вы заинтересовались описанными выше проектами, то самое время присоединиться к нашей команде!

Источник: ru.stackoverflow.com

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

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

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

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

Интро

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

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

Скриншоты

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

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


main.py

from kivy.app import App from kivy.uix.button import Button from kivy.uix.boxlayout import BoxLayout from kivy.uix.screenmanager import ScreenManager, Screen from kivy.uix.recycleview import RecycleView from kivy.uix.gridlayout import GridLayout from kivy.core.window import Window from kivy.config import ConfigParser from kivy.uix.textinput import TextInput from kivy.uix.label import Label from kivy.metrics import dp from datetime import datetime import os import ast import time class MenuScreen(Screen): def __init__(self, **kw): super(MenuScreen, self).__init__(**kw) box = BoxLayout(orientation=’vertical’) box.add_widget(Button(text=’Дневник питания’, on_press=lambda x: set_screen(‘list_food’))) box.add_widget(Button(text=’Добавить блюдо в дневник питания’, on_press=lambda x: set_screen(‘add_food’))) self.add_widget(box) class SortedListFood(Screen): def __init__(self, **kw): super(SortedListFood, self).__init__(**kw) def on_enter(self): # Будет вызвана в момент открытия экрана self.layout = GridLayout(cols=1, spacing=10, size_hint_y=None) self.layout.bind(minimum_height=self.layout.setter(‘height’)) back_button = Button(text='< Назад в главное меню’, on_press=lambda x: set_screen(‘menu’), size_hint_y=None, height=dp(40)) self.layout.add_widget(back_button) root = RecycleView(size_hint=(1, None), size=(Window.width, Window.height)) root.add_widget(self.layout) self.add_widget(root) dic_foods = ast.literal_eval( App.get_running_app().config.get(‘General’, ‘user_data’)) for f, d in sorted(dic_foods.items(), key=lambda x: x[1]): fd = f.decode(‘u8’) + ‘ ‘ + (datetime.fromtimestamp(d).strftime(‘%Y-%m-%d’)) btn = Button(text=fd, size_hint_y=None, height=dp(40)) self.layout.add_widget(btn) def on_leave(self): # Будет вызвана в момент закрытия экрана self.layout.clear_widgets() # очищаем список class AddFood(Screen): def buttonClicked(self, btn1): if not self.txt1.text: return self.app = App.get_running_app() self.app.user_data = ast.literal_eval( self.app.config.get(‘General’, ‘user_data’)) self.app.user_data[self.txt1.text.encode(‘u8’)] = int(time.time()) self.app.config.set(‘General’, ‘user_data’, self.app.user_data) self.app.config.write() text = «Последнее добавленное блюдо: » + self.txt1.text self.result.text = text self.txt1.text = » def __init__(self, **kw): super(AddFood, self).__init__(**kw) box = BoxLayout(orientation=’vertical’) back_button = Button(text='< Назад в главное меню’, on_press=lambda x: set_screen(‘menu’), size_hint_y=None, height=dp(40)) box.add_widget(back_button) self.txt1 = TextInput(text=», multiline=False, height=dp(40), size_hint_y=None, hint_text=»Название блюда») box.add_widget(self.txt1) btn1 = Button(text=»Добавить блюдо», size_hint_y=None, height=dp(40)) btn1.bind(on_press=self.buttonClicked) box.add_widget(btn1) self.result = Label(text=») box.add_widget(self.result) self.add_widget(box) def set_screen(name_screen): sm.current = name_screen sm = ScreenManager() sm.add_widget(MenuScreen(name=’menu’)) sm.add_widget(SortedListFood(name=’list_food’)) sm.add_widget(AddFood(name=’add_food’)) class FoodOptionsApp(App): def __init__(self, **kvargs): super(FoodOptionsApp, self).__init__(**kvargs) self.config = ConfigParser() def build_config(self, config): config.adddefaultsection(‘General’) config.setdefault(‘General’, ‘user_data’, ‘<>’) def set_value_from_config(self): self.config.read(os.path.join(self.directory, ‘%(appname)s.ini’)) self.user_data = ast.literal_eval(self.config.get( ‘General’, ‘user_data’)) def get_application_config(self): return super(FoodOptionsApp, self).get_application_config( ‘<>/%(appname)s.ini’.format(self.directory)) def build(self): return sm if __name__ == ‘__main__’: FoodOptionsApp().run()

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

class MenuScreen(Screen):
box = BoxLayout(orientation=’vertical’)
Button(text=’Дневник питания’, on_press=lambda x: set_screen(‘list_food’))
.add_widget()
self.layout = GridLayout(cols=1, spacing=10, size_hint_y=None)

Grid Layout чем-то напоминает тег table в html, указывается cols — кол-во колонок или rows — кол-во строк.

root = RecycleView(size_hint=(1, None), size=(Window.width, Window.height))
config.get(‘General’, ‘user_data’)

Запуск на windows macos

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

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

python3 main.py

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

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

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

# Ставим последнюю версию python-for-android cd /home/kivy/Repos rm -fr python-for-android/ git clone https://github.com/kivy/python-for-android.git cd ~ mkdir Project cd Project git clone https://github.com/Alexmod/FoodOptions.git cd FoodOptions buildozer android debug # Первый раз эта команда будет долго тянуть 100500 всяких библиотек, # но в следующие разы выполняться за секунды.

Как закинуть apk файл на телефон?

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

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

sudo apt install adb

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

adb install -r foodoptions-0.1-debug.apk

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

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

adb logcat| grep python

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

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

.buildozer/android/platform/build/dists/foodoptions/templates/strings.tmpl.xml

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

О файле buildozer.spec

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

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

cd /tmp buildozer init

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

icon.filename = %(source.dir)s/data/icon.png

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

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

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

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

sudo apt install zipalign buildozer android release jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore /path/keystore bin/apk-unsigned.apk apkname zipalign -v 4 bin/apk-apkname-unsigned.apk bin/apk-apkname-release.apk

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

Ссылки

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

Источник: habr.com

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

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

2018-10-24 в 7:02, admin , рубрики: kivy, python, еда, Здоровье гика, питание

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

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

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

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

Интро

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

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

Скриншоты

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

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

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

from kivy.app import App from kivy.uix.button import Button from kivy.uix.boxlayout import BoxLayout from kivy.uix.screenmanager import ScreenManager, Screen from kivy.uix.recycleview import RecycleView from kivy.uix.gridlayout import GridLayout from kivy.core.window import Window from kivy.config import ConfigParser from kivy.uix.textinput import TextInput from kivy.uix.label import Label from kivy.metrics import dp from datetime import datetime import os import ast import time class MenuScreen(Screen): def __init__(self, **kw): super(MenuScreen, self).__init__(**kw) box = BoxLayout(orientation=’vertical’) box.add_widget(Button(text=’Дневник питания’, on_press=lambda x: set_screen(‘list_food’))) box.add_widget(Button(text=’Добавить блюдо в дневник питания’, on_press=lambda x: set_screen(‘add_food’))) self.add_widget(box) class SortedListFood(Screen): def __init__(self, **kw): super(SortedListFood, self).__init__(**kw) def on_enter(self): # Будет вызвана в момент открытия экрана self.layout = GridLayout(cols=1, spacing=10, size_hint_y=None) self.layout.bind(minimum_height=self.layout.setter(‘height’)) back_button = Button(text='< Назад в главное меню’, on_press=lambda x: set_screen(‘menu’), size_hint_y=None, height=dp(40)) self.layout.add_widget(back_button) root = RecycleView(size_hint=(1, None), size=(Window.width, Window.height)) root.add_widget(self.layout) self.add_widget(root) dic_foods = ast.literal_eval( App.get_running_app().config.get(‘General’, ‘user_data’)) for f, d in sorted(dic_foods.items(), key=lambda x: x[1]): fd = f.decode(‘u8’) + ‘ ‘ + (datetime.fromtimestamp(d).strftime(‘%Y-%m-%d’)) btn = Button(text=fd, size_hint_y=None, height=dp(40)) self.layout.add_widget(btn) def on_leave(self): # Будет вызвана в момент закрытия экрана self.layout.clear_widgets() # очищаем список class AddFood(Screen): def buttonClicked(self, btn1): if not self.txt1.text: return self.app = App.get_running_app() self.app.user_data = ast.literal_eval( self.app.config.get(‘General’, ‘user_data’)) self.app.user_data[self.txt1.text.encode(‘u8’)] = int(time.time()) self.app.config.set(‘General’, ‘user_data’, self.app.user_data) self.app.config.write() text = «Последнее добавленное блюдо: » + self.txt1.text self.result.text = text self.txt1.text = » def __init__(self, **kw): super(AddFood, self).__init__(**kw) box = BoxLayout(orientation=’vertical’) back_button = Button(text='< Назад в главное меню’, on_press=lambda x: set_screen(‘menu’), size_hint_y=None, height=dp(40)) box.add_widget(back_button) self.txt1 = TextInput(text=», multiline=False, height=dp(40), size_hint_y=None, hint_text=»Название блюда») box.add_widget(self.txt1) btn1 = Button(text=»Добавить блюдо», size_hint_y=None, height=dp(40)) btn1.bind(on_press=self.buttonClicked) box.add_widget(btn1) self.result = Label(text=») box.add_widget(self.result) self.add_widget(box) def set_screen(name_screen): sm.current = name_screen sm = ScreenManager() sm.add_widget(MenuScreen(name=’menu’)) sm.add_widget(SortedListFood(name=’list_food’)) sm.add_widget(AddFood(name=’add_food’)) class FoodOptionsApp(App): def __init__(self, **kvargs): super(FoodOptionsApp, self).__init__(**kvargs) self.config = ConfigParser() def build_config(self, config): config.adddefaultsection(‘General’) config.setdefault(‘General’, ‘user_data’, ‘<>’) def set_value_from_config(self): self.config.read(os.path.join(self.directory, ‘%(appname)s.ini’)) self.user_data = ast.literal_eval(self.config.get( ‘General’, ‘user_data’)) def get_application_config(self): return super(FoodOptionsApp, self).get_application_config( ‘<>/%(appname)s.ini’.format(self.directory)) def build(self): return sm if __name__ == ‘__main__’: FoodOptionsApp().run()

Читайте также:
Что включают в себя анимационные программы

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

class MenuScreen(Screen):
box = BoxLayout(orientation=’vertical’)
Button(text=’Дневник питания’, on_press=lambda x: set_screen(‘list_food’))
.add_widget()
self.layout = GridLayout(cols=1, spacing=10, size_hint_y=None)
root = RecycleView(size_hint=(1, None), size=(Window.width, Window.height))
config.get(‘General’, ‘user_data’)

Запуск на windows macos

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

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

python3 main.py

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

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

  1. Скачиваем готовую виртуальную машину от разработчиков kivy, в которой уже все настроено. https://github.com/Zen-CODE/kivybits/blob/master/KivyCompleteVM/ReadMe.txt. Пароль: kivy
  2. Запускаем ее в Virtual Box.
  3. Открываем терминал и вводим следующие команды:

# Ставим последнюю версию python-for-android cd /home/kivy/Repos rm -fr python-for-android/ git clone https://github.com/kivy/python-for-android.git cd ~ mkdir Project cd Project git clone https://github.com/Alexmod/FoodOptions.git cd FoodOptions buildozer android debug # Первый раз эта команда будет долго тянуть 100500 всяких библиотек, # но в следующие разы выполняться за секунды.

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

Как закинуть apk файл на телефон?

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

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

sudo apt install adb

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

adb install -r foodoptions-0.1-debug.apk

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

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

adb logcat| grep python

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

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

.buildozer/android/platform/build/dists/foodoptions/templates/strings.tmpl.xml

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

О файле buildozer.spec

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

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

cd /tmp buildozer init

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

icon.filename = %(source.dir)s/data/icon.png

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

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

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

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

sudo apt install zipalign buildozer android release jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore /path/keystore bin/apk-unsigned.apk apkname zipalign -v 4 bin/apk-apkname-unsigned.apk bin/apk-apkname-release.apk

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

Ссылки

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

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

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

Источник: www.pvsm.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru