как писать пайтон код на андроид

Содержание
  1. Устанавливаем и программируем на Питоне на Андроиде
  2. Установите Pydroid 3 И Его Плагины
  3. Пакеты Установки Pip
  4. Используйте Встроенный Интерфейс Командной Строки Pydroid 3
  5. Используйте оболочку Python
  6. Сохраняйте Папки И Файлы На Вашем Устройстве
  7. Публикация исходного кода на Pastebin
  8. Настройка IDE
  9. Можете Ли Вы Использовать Pydroid Для Любого Проекта?
  10. Kivy — Создание мобильных приложений на Python
  11. Содержание
  12. Принципы работы фреймворка Kivy Python
  13. Установка Kivy
  14. Как разрабатывать на Python под Android
  15. Python-for-android
  16. Обращение к Android API с помощью PyJNIus
  17. Plyer: кроссплатформенное API для платформоспецифичных задач
  18. Не только ради Kivy
  19. Разработка игры под Android на Python на базе Kivy. От А до Я: подводные камни и неочевидные решения. Часть 1
  20. 0. Если вы впервые слышите о Kivy.
  21. 1. Немного о моей игре
  22. 2. Kivy тормоз или я что-то делаю не так?
  23. 3. Сервисы. Автозапуск и перезапуск
  24. Локализация и мультиязычность

Устанавливаем и программируем на Питоне на Андроиде

Узнайте, как установить IDE Pydroid 3 на Android, а также полезные инструменты и библиотеки для практики программирования на Python!

Независимо от того, являетесь ли вы новичком в программировании на Python или являетесь экспертом, давайте посмотрим, как вы можете использовать Pydroid 3 в полной мере на своем устройстве Android.%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0 Python %D0%BD%D0%B0 Android %D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D1%8F 1

Установите Pydroid 3 И Его Плагины

По умолчанию Pydroid 3 не имеет разрешения на доступ к памяти вашего устройства. Это делает создание папок проекта трудным или невозможным без некоторых технических манипуляций. Чтобы решить эту проблему, загрузите плагин разрешений Pydroid из Play Store, который разрешит Pydroid создавать папки и файлы на вашем устройстве.

Пакеты Установки Pip

После того, как вы все настроили, вы можете начать использовать команду pip для установки пакетов для своих проектов, ровно также, как вы это делаете на ПК. Pydroid 3 поставляется с интерфейсом, который позволяет устанавливать пакеты без написания команд в терминале.

Есть несколько способов установить пакеты pip на Pydroid 3. Чтобы получить доступ к этой функции, нажмите значок меню (который выглядит как три линии) в верхнем левом углу приложения. Далее перейдите к строке Pip. В верхней части меню Pip выберите ПОИСК БИБЛИОТЕК(Search Libraries), чтобы получить дополнительные параметры модуля, который вы хотите установить. Или вы можете нажать на опцию БЫСТРАЯ УСТАНОВКА(Quick Install), чтобы установить пакеты, предлагаемые к установке по умолчанию.

%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0 Python %D0%BD%D0%B0 Android %D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D1%8F 2

%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0 Python %D0%BD%D0%B0 Android %D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D1%8F 3

Используйте Встроенный Интерфейс Командной Строки Pydroid 3

Pydroid 3 также предлагает и классический минимальный интерфейс командной строки (CLI) Linux. Чтобы получить к нему доступ, нажмите значок меню в верхнем левом углу приложения и выберите Терминал (Terminal):

%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0 Python %D0%BD%D0%B0 Android %D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D1%8F 4

Хотя запуск команды pip install packages через встроенный терминал занимает некоторое время для загрузки, она по-прежнему позволяет легко перемещаться между папками и создавать новые везде, где на вашем устройстве разрешена запись. Отметим что медленная загрузка пакетов установки pip через терминал является незначительной проблемой для Pydroid IDE.

Если вы хотите использовать предоставленную командную строку для каких-либо других целей, то имейте ввиду, что ОС Android построена на Linux, поэтому вам необходимо иметь общее представление о том, как использовать командную строку Linux.

Используйте оболочку Python

Пустая страница, которая появляется при открытии Pydroid 3, является его встроенной оболочкой Python. Как и оболочка Python на вашем ПК, она по умолчанию видит любую написанную на ней команду как код Python.

Чтобы использовать оболочку, введите любую команду Python и нажмите большую кнопку запуска в нижнем левом углу редактора. Это откроет интерпретатор Python, который отобразит работу вашего кода.

Закончив работу, введите exit (), чтобы покинуть оболочку Python командной строки.

%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0 Python %D0%BD%D0%B0 Android %D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D1%8F 5

Сохраняйте Папки И Файлы На Вашем Устройстве

Как и любой другой редактор кода, Pydroid 3 имеет интерфейс, который позволяет сохранять файл в любой названной папке на вашем устройстве. Если вы хотите создать папку проекта, вы также можете сохранить новые папки с нужными параметрами сохранения файлов.

%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0 Python %D0%BD%D0%B0 Android %D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D1%8F 6

%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0 Python %D0%BD%D0%B0 Android %D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D1%8F 7

Чтобы создать новый файл полностью, коснитесь значка папки. Выберите « Создать» и следуйте инструкциям, выделенным ранее, чтобы сохранить файл в папке. Если вы хотите, чтобы ваш новый файл находился в том же каталоге, что и существующий, убедитесь, что вы выбрали ту же папку, которая содержит существующий.

Публикация исходного кода на Pastebin

%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0 Python %D0%BD%D0%B0 Android %D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D1%8F 8

Откройте любой браузер на своем устройстве Android и вставьте скопированную ссылку в строку поиска, чтобы увидеть исходный код на Pastebin. Вы также можете поделиться этой ссылкой с людьми, которым вы хотите предоставить доступ к своему коду.

Настройка IDE

Вы также можете настроить среду разработки, если хотите. Чтобы изменить внешний вид редактора, коснитесь значка настройки в верхнем левом углу экрана и перейдите в « Настройки»> «Внешний вид», чтобы переключиться на предпочитаемую тему, или выберите другие доступные параметры внешнего вида.

%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0 Python %D0%BD%D0%B0 Android %D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D1%8F 9

Чтобы получить дополнительные возможности настройки, коснитесь параметра « Редактор» и выберите свои предпочтения. Вы также можете коснуться других опций в меню настроек, чтобы увидеть доступные вам опции.

Когда вы щелкаете по значку меню, параметр «Настройки терминала» также предлагает некоторые конфигурации терминала.

При установке Pydroid 3 IDLE на ваше устройство Android автоматически загружается и устанавливается Python 3. Однако установленный Pydroid 3 IDLE для Python функционирует как виртуальная среда на Android и попытка запустить оболочку Python вне командной строки Pydroid IDLE выдает ошибку.

Если вы хотите попробовать работать в этом режиме, вам необходимо установить специальное стороннее приложение Android CMD (предпочтительно Termux из Google Play Store).

После установки Termux откройте его, убедившись, что вы также установили Pydroid 3. Затем введите python в Termux CMD. Он выдает ошибку каталога файлов, указывающую, что Python не существует в глобальном пространстве Android до его установки с помощью команды pkg install python через Termux.

Однако запуск python на встроенном терминале Pydroid 3 успешно входит в оболочку Python.

Можете Ли Вы Использовать Pydroid Для Любого Проекта?

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

Помимо управления небольшими проектами, Pydroid 3 также является отличным инструментом, с которым можно поиграть, чтобы улучшить свои навыки программирования на Python, особенно если у вас нет ПК для запуска программ Python.

Источник

Kivy — Создание мобильных приложений на Python

kivy python android ios

В наши дни каждый разработчик может столкнуться с необходимостью работы над мобильным или веб-приложением на Python. В Python нет встроенных инструментов для мобильных устройств, тем не менее существуют пакеты, которые можно использовать для создания мобильных приложений. Это Kivy, PyQt и даже библиотека Toga от Beeware.

Содержание

Библиотеки являются основными элементами мобильного мира Python. Однако, говоря о Kivy, нельзя игнорировать преимущества данного фреймворка при работе с мобильными приложениями. Внешний вид приложения автоматически подстраивается под все платформы, разработчику при этом не нужно компилировать код после каждой поправки. Кроме того, здесь для создания приложений можно использовать чистый синтаксис Python.

В руководстве будут разобраны следующие темы:

Разбор данного руководства предполагает, что читатель знаком с объектно-ориентированным программированием. Для введения в курс дела можете просмотреть статью об Объектно-ориентированном программировании (ООП) в Python 3.

Принципы работы фреймворка Kivy Python

Kivy был создан в 2011 году. Данный кросс-платформенный фреймворк Python работает на Windows, Mac, Linux и Raspberry Pi. В дополнение к стандартному вводу через клавиатуру и мышь он поддерживает мультитач. Kivy даже поддерживает ускорение GPU своей графики, что во многом является следствием использования OpenGL ES2. У проекта есть лицензия MIT, поэтому библиотеку можно использовать бесплатно и вкупе с коммерческим программным обеспечением.

Во время разработки приложения через Kivy создается интуитивно понятный интерфейс (Natural user Interface), или NUI. Его главная идея в том, чтобы пользователь мог легко и быстро приспособиться к программному обеспечению без чтения инструкций.

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

Установка Kivy

У Kivy есть множество зависимостей, поэтому лучше устанавливать его в виртуальную среду Python. Можно использовать встроенную библиотеку Python venv или же пакет virtualenv.

Виртуальная среда Python создается следующим образом:

Источник

Как разрабатывать на Python под Android

pydroid

Рассказывает Александр Тейлор, разработчик проекта Kivy

В последнее время появляется большое количество ресурсов по разработке на Python под Android. Все чаще упоминается предназначенный для этой задачи фреймворк Kivy (и его ответвления), ведь он является одним из самых проверенных временем и надежных проектов в этой области. Тем не менее, одну важную деталь незаслуженно обделяют вниманием — что вообще мы сможем делать после того, как Python станет запускаться на устройстве? Есть ли какие-то ограничения? Все ли библиотеки можно подключать? Возможно ли делать все то же, что и при написании приложения на Java? Данные вопросы волнуют многих, и они рассматриваются и решаются в рамках проекта 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 отпадет, так как он необходим только для поддержки некоторых специфичных нужд фреймворка.

Обращение к Android API с помощью PyJNIus

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

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

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

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

Plyer: кроссплатформенное API для платформоспецифичных задач

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

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

— работают как в десктопных, так и в мобильных приложениях, а получение данных с компаса/гироскопа и отправка 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, которая предназначена для этого, но эти возможности могут быть расширены еще больше в ближайшем будущем. И если вы заинтересовались описанными выше проектами, то самое время присоединиться к нашей команде!

Хинт для программистов: если зарегистрируетесь на соревнования Huawei Cup, то бесплатно получите доступ к онлайн-школе для участников. Можно прокачаться по разным навыкам и выиграть призы в самом соревновании.

Перейти к регистрации

Источник

Разработка игры под Android на Python на базе Kivy. От А до Я: подводные камни и неочевидные решения. Часть 1

Некоторое время тому назад я решил попробовать написать что-то на Python под Android. Такой странный для многих выбор обусловлен тем, что я люблю Python и люблю Android, а ещё люблю делать необычное (ну хорошо, не самое обычное). В качестве фреймворка был выбран Kivy — фактически, безальтернативный вариант, но он мне очень понравился. Однако, по нему не так уж много информации (нет, документация отличная, но иногда её недостаточно), особенно на русском языке, а некоторые вещи хоть и можно реализовать, но их то ли никто раньше не делал, то ли не счёл нужным поделиться информацией. Ну а я счёл 🙂 И этот пост тому результатом.

Под катом я расскажу обо всех этапах разработки, о том, как развивалась простая идея и как для этого приходилось искать новые возможности, о возникших подводных камнях и багах, о неочевидных решениях и устаревшей документации 🙂 Цель — описать в одном тексте основные пункты, чтобы человеку, решившему написать что-то немного сложнее игры Pong из официального туториала, не приходилось перерывать официальный форум поддержки и StackOverflow и тратить часы на то, что делается за пару минут, если знаешь, как.

0. Если вы впервые слышите о Kivy.

… то всё зависит от того, любите ли вы Python и Android, и интересно ли вам в этом разобраться. Если нет — проще забить 🙂 А если да, то начать нужно с официальной документации, гайдов, и уже упомянутого официального туториала по игре Pong — это даст базовое представление о фреймворке и его возможностях. Я же не буду останавливаться на столь тривиальных вещах (тем более, для понимания базовых принципов туториал отлично подходит) и сразу пойду дальше. Будем считать, что это было вступление 🙂

1. Немного о моей игре

Для начала нужна была идея. Мне хотелось что-то достаточно простое, чтобы оценить возможности фреймворка, но и достаточно интересное и оригинальное, чтобы не программировать ради программирования (это здорово, но когда это не единственная цель — это ещё лучше). Я неплохо проектирую интерфейсы, но не умею рисовать, поэтому игра должна была быть простая графически, или вообще текстовая. И тут так уж сложилось, что у меня есть заброшенный сайт с цитатами, с которого я когда-то начинал свой путь в web-разработке (я о нём даже писал на Хабре много лет назад). Поэтому идея возникла такая: игра-викторина «Угадай цитату». В русскоязычном Google Play ничего подобного не было, а в англоязычном была пара поделок низкого качества с сотней скачиваний.

Почти сразу же стало понятно, что просто так отгадывать цитату за цитатой — скучно. Так появились первые «фишки», которые, в итоге, и определили итоговую игру. В первую очередь это были тематические пакеты (то есть пакеты цитат, объединённые одной темой или автором) и баллы (которые начисляются за отгадывание цитат и прохождение пакетов, и тратятся на подсказки и разблокировку новых тем), а также статистика, достижения и избранное.

Так всё начиналось (кликабельно):
image loader image loader image loader

Ну ладно, ладно, больше не буду показывать такой ужас 🙂 Кстати, вот так оно выглядит сейчас (тоже кликабельно, скрины взяты с Google Play):
image loader image loader image loader

Первые проблемы начались с первого же экрана…

2. Kivy тормоз или я что-то делаю не так?

Один мой друг любит отвечать на такие вопросы «да» 🙂 На самом деле, некоторые вещи в Kivy действительно работают медленно, например, создание виджетов. Но это не значит, что это дело нельзя оптимизировать. Об этом я и расскажу.

Так как цитаты и темы хранятся в БД, то, само собой, кнопки с пакетами генерируются динамически. И вот тут-то я обнаружил, что происходит это очень медленно: примерно полсекунды на список из 20 кнопок. Возможно, это и не очень много при загрузке приложения, но при переходе на главный экран из других внутренних экранов приложения — непозволительно много. Здесь стоит отметить, что кнопка к тому моменту уже представляла собой, на самом деле, набор из нескольких элементов, визуально составляющих одну кнопку:

image loader

Первым моим побуждением было тем или иным образом закешировать их, и, действительно, опыт показал, что если создать все виджеты заранее, и сохранить их как свойство объекта StartScreen, то всё (кроме первой генерации) работает достаточно быстро. Однако же, данные в кнопках нужно периодически обновлять (хотя бы то же количество отгаданных цитат). Да и загрузку новых пакетов я уже тогда планировал. Конечно, не проблема реализовать и это, но я решил не изобретать велосипед и подумать.

Сначала стоило убедиться, что проблема именно в создании виджетов, поэтому я за несколько минут набросал простенькое приложение на два экрана, в каждом из которых генерировался набор строк из лейбла и чекбокса количеством 50 шт. 🙂

Запустил на своём стареньком Moto G (gen3) и получил:

И далее в том же духе. Поиск по этому вопросу ничего не дал, поэтому я обратился к разработчикам. И получил ответ: «Создание виджетов относительно медленное, особенно в зависимости от того, что они содержат. Для создания больших списков лучше использовать RecycleView». Здесь хочу пояснить, почему я вообще описываю этот момент, ведь описание RecycleView есть в документации. Да, действительно, есть, но мало кто способен изучить и запомнить всю документацию перед тем, как начнёт разработку, и найти нужный инструмент бывает непросто, особенно если он нигде не описан в контексте решения конкретной проблемы. Теперь же он описан 🙂

Более чем в 100 раз быстрее. Впечатляет, не правда ли?

В завершение следует упомянуть, что RecycleView — не панацея. Он не подходит, если размер элемента зависит от содержимого (например, Label, размер которого меняется в зависимости от количества текста).

3. Сервисы. Автозапуск и перезапуск

Следующая проблема, с которой я столкнулся, не поддавалась решению так долго, что я уже малодушно подумывал счесть данный фреймворк непригодным и забить 🙂 Проблема была с сервисами (в Android так называется процессы, выполняющиеся в фоновом режиме). Создать сервис не так уж и сложно — немного сбивает с толку устаревшая документация, но и только. Однако, в большинстве случаев, много ли толку от сервиса, который, во-первых, не запускается автоматически при загрузке телефона, а во-вторых, не перезапускается, если «выбросить» приложение свайпом из диспетчера задач? По-моему, нет.

На тот момент по этой теме была всего лишь одна статья в официальной wiki, но она, хоть и называлась «Starting Kivy service on bootup», на самом деле всего лишь рассказывала, как при загрузке телефона запустить приложение, но не его сервис (да, такое тоже бывает полезно, но значительно реже, как по мне). Ту статью я, в итоге, переписал, а здесь расскажу подробности.

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

Из приложения мы запускаем его методом основного класса при помощи PyJnius:

Если APK собран правильно, при запуске приложения сервис будет стартовать, но этого недостаточно.

Для начала, попробуем сделать так, чтобы он перезапускался при остановке приложения (например, при снятии его из диспетчера задач). Конечно, можно было бы использовать startForeground, но это уже не совсем фоновое выполнение задачи 🙂 Для него потребуется, как минимум, уведомление — это не всегда подходит. В данном случае идеально подходит флаг START_STICKY, но мы же пишем на Python, что делает задачу не столь тривиальной — по крайней мере, при помощи PyJnius она уже не решается.

Ура, сервис рестартится. Всё? Конечно, нет 🙂 Потому что он тут же валится с ошибкой:

Проблема в функции onStartCommand(Intent intent, int flags, int startId), поскольку после перезапуска intent у нас null. Что ж, перепишем и её:

Проблема в том, что функция nativeStart() не получает нужных Extras. К сожалению, два из них мне пришлось захардкодить. В итоге выглядит это так:

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

Для начала понадобится разрешение RECEIVE_BOOT_COMPLETED — это просто. А затем — BroadcastReceiver, его придётся добавить в AndroidManifest вручную, но это тоже не проблема. Проблема в том, что в нём писать 🙂

Решение для запуска приложения (не сервиса) выглядит так:

Сначала я попытался просто переписать его для сервиса:

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

Локализация и мультиязычность

В целом, для локализации можно использовать gettext, или же поступить ещё проще — создать папку lang, в ней по файлу на каждый язык (например, en.py и ru.py), определить там все слова и фразы в виде переменных/констант, и далее подключить нужный модуль. Примерно так:

Статическая переменная использована для того, чтобы языковые константы было удобно использовать в kv-файле:

Источник

Общеобразовательный справочник
Adblock
detector