Полноценное Python-приложение для Android. Как разрабатывать на Python под Android Plyer: кроссплатформенное API для платформоспецифичных задач

Рассказывает Александр Тейлор, разработчик проекта 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 секунд:

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 для платформоспецифичных задач

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

Под этим названием в Google Play можно найти три хороших приложения (вообще их больше, но на установку других не стоит даже тратить время). Наиболее простое из них представляет собой курс Udemy по Python 2.x, запакованный командой SoloLearn в формат Android-приложения. В нём содержатся уроки, которые разделены на две ступени: базовую и продвинутую. Внутри - краткий справочный материал в текстовом или PDF-формате. Для отдельных уроков есть примеры рабочего кода. Не требует подключения к Сети.

Учим Python

Это приложение предлагает пользователям изучить третью версию языка и обладает куда более широкой функциональностью. Основной экран отведён для отображения отдельных этапов курса и личных результатов. В меню можно найти раздел для свободного творчества на Python, скачать курсы для других языков программирования, а также изучить справочную информацию. У приложения есть интересная фишка: каждый, кто проходит курс и решает задачи, получает баллы. С их общим количеством можно ознакомиться на отдельной вкладке. Так появляется дополнительная игровая составляющая, которая может мотивировать кого-то на более тщательное изучение. В конце курса можно получить сертификат об освоении языка программирования.

Learn Python Programming

Третье приложение, разработанное студией Phoenix App Labs , обладает наиболее широкой функциональностью и самым красочным интерфейсом. Здесь есть не только уроки для начинающих и уже изучавших язык, но и возможность скачивать готовые проекты на Python прямо из приложения, подробная статистика изученного, отдельная вкладка для удобного доступа к собственным программам и элемент социального соревнования в виде онлайн-чемпионата по кодингу с доской почёта. В случае успешного освоения курса каждый пользователь получает сертификат.

QPython

Полноценная среда для программирования на Python для Android-устройств. Включает в себя интерпретатор Python, консоль, редактор и SL4A-библиотеку, которая позволяет создавать и запускать скрипты прямо на гаджете (поддерживается работа со смартфонами и планшетами, поскольку имеются библиотеки для работы сетевых интерфейсов, GPS). Так что в этом приложении можно кодить и создавать полноценные проекты. Если под рукой есть хороший учебник по Python и готовые проекты, выбор QPython будет более чем оправдан, несмотря на отсутствие встроенных обучающих функций.

Python Documentation

Стильное приложение с документацией по Python 3.5 на английском языке. Умеет работать в офлайне. Есть раздел с примерами готового кода, хотя основное назначение программы - подробная справка для тех, кто уже освоил базовые принципы языка. Обладает очень удобным поиском и простой навигацией.

Quiz&Learn Python

Это приложение создано для тренировки уже имеющихся навыков программирования на Python версии 2.7 в форме коротких вопросов, затрагивающих как основы программирования на языке Python, так и очень конкретные и неожиданные способы написания кода. Quiz&Learn Python ведёт статистику на основе скорости ваших ответов. В зависимости от прогресса вопросы могут усложняться. Их можно пропускать (это влияет на прогресс: программа задаёт более простые вопросы). Кроме этого, с помощью встроенного отладчика можно написать вопрос и проверить ответ на практике.

Python Challenge

Ещё одно приложение для тех, кто уже изучил основы программирования и хочет расширить свои знания. Python Challenge представляет собой игру в формате «вопрос - ответ». В каждом раунде 20 вопросов, содержащих исполняемый код. Для ответа на них отводится определённое время. Есть раздел, содержащий те же вопросы, сгруппированные по темам, на которые можно отвечать без ограничений во времени.

Python Exercises

Удобное приложение с текстовыми уроками и примерами. Python Exercises отличается очень подробной рубрикацией, полным охватом базовых тем, а также простым интерфейсом. К сожалению, здесь нет возможности писать код, поэтому потребуется либо другая программа, либо второе устройство.

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

В этом же случае все удобно и отличном. Множество уроков и тестов позволят вам получить максимальную эффективность в обучении. Именно поэтому множество пользователей стали отзываться о приложении крайне положительно. Никогда раньше вам не было так просто и удобно начать изучения языка программирования. Разработчики постарались сделать все максимально удобно и понятно.


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

В этой статье я хотел бы рассказать о том, как создать полноценное приложение на Python для Android. Нет, это не очередной мануал для создания скрипта для sl4a , это мануал по созданию полноценного приложения с UI, возможностью собрать apk и выложить на Android Market. Заодно я хотел бы похвалиться своим первым приложением на google.play, это не hello world, а полезное приложение для фотографов, хотя и узко специализированное.

Начну рассказ пожалуй с самого приложения и завершу рассказам о том как оно делалось.

isortViewer

Мне как фотографу приходится тратить много времени на сортировку и отбор фотографий. Не всегда хочется сидеть за рабочим компьютером, когда под рукой есть ноутбук, смартфон или планшет, но копировать туда десятки гигабайт raw или jpeg файлов, а потом синхронизировать с рабочим компьютером - сомнительное удовольствие. Именно поэтому я создал программы isortManager и isortViewer, которые значительно облегчили мне работу по сортировке и отбору фотографий. Теперь заниматься отбором и сортировкой фотографий я могу лежа на пляже диване или скучая в пробке:)

Копипаст описания и пара скриншотов:
isortViewer - программа для фотографов, которая позволяет легко и быстрой отбирать и сортировать тысячи фотографий (raw или jpg) с фотосессий на ваших android смартфонах и планшетах. При этом, нет необходимости копировать десятки гигабайт jpg или raw файлов на устройство. Просто воспользуйтесь бесплатной программой isortManager для компьютера, которая сохранит все в один небольшой файл проекта:
1. Скачайте и запустите isortManager с официального сайта ;
2. Создайте проект и добавьте папки с фотографиями. Поддерживаются форматы: jpg и raw (cr2, nef, orf и т.д.). В итоге у вас получится небольшой файл проекта (примерно 150 мб на несколько тысяч фотографий, будь то jpg или raw формат);
3. Скопируйте на ваше android устройство файл проекта, откройте в isortViewer. Вы можете помечать фотографии «на удаление», а так же, ставить рейтинги от 1 до 5 звезд;
4. После этого, скопируйте файл проекта обратно и примените изменения в isortManager. Кроме удаления выбранных фотографий, вы можете копировать или перемещать отмеченные фотографии. Например, фотографии с «5 звезд» можно скопировать в папку «шедевры», а «1 звезда» переместить в папку «хлам».

Приложение абсолютно бесплатно и доступно на google.play , однако донейты приветствуются.

Исходники доступны на официальном сайте!

Как это делалось

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

isortManager

С isortManager для PC проблем не возникло, создание GUI сборки под windows уже давно обкатано и работает он очень просто: с помощью dcraw выдирает jpg превьюшки из raw файлов, ресайзит из с помощью PIL и складывает в один файл с достаточно простой структурой. Был изобретен свой весолипед с контейнером для хранения фотографий и метаданных (полный путь к фотографии, отметка «на удаление» и отметка рейтинга), так как, например, zip или tar формат, не могут изменять один файл в архиве (метаданные), требую перепаковки всех файлов. Файлы просто пишутся один за другим подряд и в блоке метаданных (обычный repr питоновского словаря) в конце сохраняется смещения начала файлов, плюс в конце файла пишется размер блока метаданных. GUI написано на Tkinter (люблю я его за быстроту написания и за малый размер итоговой сборки), вот собственно скриншот:

И да, все это работает и на linux, и даже быстрее чем на windows)

isortViewer для android

Всего я нашел два способа заставить python приложение работать как полноценное приложение на android, это pygame for android и проект kivy .
Pygame - более низкоуровневый, все UI пришлось бы рисовать вручную, что отняло бы много времени, поэтому был выбран фреймворк kivy. Итак:

Это замечательный фрейморк для написания приложение для windows, linux, MacOS, android и iOS. Поддерживается мультитач, UI рисутется через OpenGL, значит должно работать аппаратное ускорение. Увидеть работу виджетов можно установив демонстрационное приложение Kivy Showcase . Есть возможность использования некоторых платформо специфичных функций, например, вибро или акселерометр, с помощью модуля android.

Hello World выглядит так:

Import kivy kivy.require("1.0.6") # replace with your current kivy version ! from kivy.app import App from kivy.uix.button import Button class MyApp(App): def build(self): return Button(text="Hello World") if __name__ == "__main__": MyApp().run()

Причем этот код будет работать на всех заявленных платформах. Пропадает необходимость в тестировании приложения в эмуляторе. Достаточно запустить скрипт на исполнение в своей любимой IDE и увидеть результат на экране компьютера, без задержек на компиляцию, запуск эмулятора и пр. Если вы все же хотите увидеть как это будет выглядеть непосредственно на устройстве, просто установите Kivy Launcher , скопируйте файлы проекта на карту памяти и запустите. Дебажить при этом можно при помощи adb logcat.
Если вы используете библиотеку android, которой нет на PC, но хочется запускать приложение не только на android, воспользуйте такой конструкцией:
try: import android except ImportError: android=None ... if android: android.vibrate(0.05)

Сборка apk достаточно проста и описана на этой странице. После сборки релиза, достаточно подписать свое приложение (я использовал этот мануал) и выложить в google play.

Плюсы kivy:

  • Быстрая разработка под различные платформы, практически без доработки кода.
  • Доступен широкий выбор виджетов
  • Высокая скорость работы. Весь ресурсоемкий вынесен в С модули. Сам интерпретатор python на android работает нативно.
  • Фремворк включает в себя множество инструментов, например анимация, кеширование и пр.
  • upd: Доступ к камере, буферу обмена, микрофону. Написать свой видеоплеер можно буквально за 20 строк .

Минусы kivy:

  • Большой размер apk файла. Проект с 300 кб ресурсов (скрипты, графика) собирается в 7 мб apk. Хотя, думаю, есть возможность это как то оптимизировать.
  • Невозможность (пока), восстанавливать работу после сворачивания - приложение закрывается

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

Хотелось бы сразу пресечь холивары на тему «для android только java, python не нужен». Я считаю, не важно, какие технологии «под капотом», главное чтоб приложение было качественным.
Сфера применения kivy может быть огромной. Сейчас на моем счету несколько приложений, написанных под заказ, где python с фремворком kivy показал себя с хорошей стороны. Например, ровно за один час, было написано приложение, для сети сервисных центров. Приложение работает в режиме киоска и установлено на дешевые китайские планшеты, которые висят в холле. Клиент набирает номер заказа, далее по WiFi планшет соединяется с сервером и сообщает статус заказа.

Теги: Добавить метки

Последняя QPython - Python for Android apk Скачать. QPython is a program engine that runs Python script on your Android devices.
It contains the Python interpreter, editor, QPYPI, QRCode reader and some amazing features for Android.

It"s literally the most awesome Python on Android.

Newest version is 2.4.0, it contains the following amazing features.

[[ Main Features ]]

Offline Python 2.7.15 / 3.6 interpreter all in one: no Internet is required to run Python programs
- An built-in awesome Python IDE
- Pip package manager and a custom repository for prebuilt wheel packages like enhanced scientific libraries
- Powerful QRCode scan can read program / link / notebook link from QRCode
- Built-in Notebook plug-in, which easily allows you to open the jupyter notebook documentation

[[ Programming & Packages ]]

With the features below, you can easily develop your apps:

Built-in SL4A library, allowing your Android device to easily function (One of QPython’s powerful features)
- Built-in pygame library for android SDL2, allowing you to develop game on android easily
- Built-in bottle web framework, allowing you to develop WebApps quickly

In addition, QPython supports the following libraries:

Django / Flask / Tornado ...
- Numpy / Scipy ...
- Lots of libraries installed along with the QPYPI client.

[[ Terminal’s features ]]

When you long click on the dashboard’s terminal icon, you can start the system terminal shell or Python terminal
- You can use the quick key at the bottom of the terminal.
- Change terminal’s behavior or font size from the editor’s setting

[[ IDE’s featres ]]

Code auto-indentation & Syntax highlighting
- Extended keyboard bar with all the essential symbols you need to program in Python
- Multiple themes
- Enhanced code navigation with interactive assignment/definition go-tos
- One click share with GIST.

[ IMPORTANT NOTE ]

To enable programming with some of Android’s features, QPython requires the following permissions: Bluetooth, GPS, and others,etc.
It doesn"t require some permissions like access user account, access phone"s status, meaning you cannot use some SL4A APIs.
- If you are using an older version with Android <= 5.0 and QPython doesn"t work with your device, maybe you need to enable the python2 compatible core from the QPython setting.

[ QPython community ]

https://www.facebook.com/groups/qpython

[ Feedback ]

Please give us five stars if you like our app.
Thank you!
Contact us if you have any problems.
http://m.facebook.com/QPython
http://twitter.com/QPython

https://groups.google.com/forum/#!forum/qpython

This software uses code of Android Terminal Emulator licensed under the APACHE2 LICENSE.

Parts of the source could be found on https://github.com/qpython-android.

If you can"t install or use the latest version, please install the legacy version from https://github.com/qpython-android/qpython/releases Скачать и установить Play Store APK файл или загрузить и установить obb от GooglePlay AppStore .

Похожие статьи