- Tools to run Python on Android
- 1. BeeWare
- 2. Chaquopy
- 3. Kivy
- 4. Pyqtdeploy
- 5. QPython
- 6. SL4A
- 7. PySide
- 8.Termux
- Полноценное Python приложение на Android
- isortViewer
- Как это делалось
- Как вызвать Python Из Java
- 1. Обзор
- 2. Простой Скрипт На Python
- 3. Ядро Java
- 3.1. Использование ProcessBuilder
- 3.2. Работа Со Скриптовым Движком JSR-223
- 4. Джайтон
- 5. Apache Commons Exec
- 6. Использование HTTP для взаимодействия
- 7. Заключение
Tools to run Python on Android
Jun 14, 2018 · 6 min read
Python has proven itself as a highly capable language — approachable for newcomers, but powerful in the hands of experts. Why shouldn’t you be able to use Python everywhere that you need to tell a computer to do something? And shouldn’t your tools exploit all the capabilities of Python as a language, not just the bits that map nicely to a C binding?
Modern computing doesn’t happen in an 80×25 console window. It happens on phones, tablets, and desktop machines with rich user interfaces. Shouldn’t you be able to use Python in all those locations, and exploit the unique capabilities of those platforms?
End users shouldn’t have to care what language their tools are written in. And that starts with looking and behaving like completely native tools. Native appearance, native behavior, delivered in the way a native app is delivered. Why shouldn’t your Python tools fit in just as well as a native tool?
There are several ways to use Python on Android.
1. BeeWare
BeeWare is a collection of tools for building native user interfaces
This is what BeeWare provides. Tools to help you write Python code with a rich, native user interface; and the libraries and support code necessary to get that code running on iOS, Android, macOS, Linux, Windows, tvOS, and more.
The Open Source development process has proven itself to be the most reliable way to develop robust and reliable software. That’s why the entire BeeWare suite of tools are BSD licensed, and available for all to use and modify.
2. Chaquopy
Chaquopy is a plugin for Android Studio’s Gradle-based build system.
Chaquopy enables you to freely intermix Java and Python in your app, using whichever language is best for your needs:
- With the Python API , you can write an app partly or entirely in Python. The complete Android API and user interface toolkit are directly at your disposal.
Chaquopy works within Android’s standard build system:
- If you use Android Studio, you can start using Chaquopy in 5 minutes with no change to your existing development process.
- Download and installation are automated via Gradle.
- Try out the demo app for Python 2 or Python 3.
- Browse example source code on GitHub.
- Or view the documentation.
3. Kivy
Kivy is a cross-platform OpenGL-based user interface toolkit.
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.
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.
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.
4. Pyqtdeploy
P yqtdeploy is a tool for deploying PyQt applications. It supports deployment to desktop platforms (Linux, Windows and OS X) and to mobile platforms (iOS and Android).
pyqtdeploy works by taking the individual modules of a PyQt application, freezing them, and then placing them in a Qt resource file that is converted to C++ code by Qt’s rcc tool. Python’s standard library is handled in the same way.
pyqtdeploy also generates a Qt .pro file that describes all the generated C++ code. From this Qt’s qmake tool is used to generate a platform-specific Makefile which will then generate a single executable. Further Qt and/or platform specific tools can then be used to convert the executable to a platform specific deployable package.
pyqtdeploy requires PyQt5 and Python v3.2 or later to be installed.
PyQt4 and PyQt5 applications written using Python v2.6 and later and Python v3.3 and later are supported.
pyqtdeploy is released under the BSD license.
5. QPython
QPython is an on-device script engine and development environment.
In most cases, script can get your jobs done as good as the native application. Now you can make it with QPython’s help.
QPython is a script engine which runs Python programs on android devices. It also can help developers develop android applications.
QPython includes a complete development kit which help you to develop programs with mobile provides regular Python console
6. SL4A
SL4A (Scripting Layer for Android), originally named ASE (Android Scripting Environment), is a set of “facades” which expose a greatly-simplified subset of the Android API.
SL4A brings scripting languages to Android by allowing you to edit and execute scripts and interactive interpreters directly on the Android device. These scripts have access to many of the APIs available to full-fledged Android applications, but with a greatly simplified interface that makes it easy to get things done.
Scripts can be run interactively in a terminal and in the background. Python, Perl, JRuby, Lua, BeanShell, JavaScript, Tcl, and shell are currently supported, and we’re planning to add more. See the SL4A Video Help playlist on YouTube for various demonstrations of SL4A’s features.
SL4A is designed for developers and is alpha quality software.
7. PySide
PySide (the Python binding for the Qt toolkit) has some preliminary support for Android.
The PySide project provides LGPL-licensed Python bindings for the Qt 4. It also includes complete toolchain for rapidly generating bindings for any Qt-based C++ class hierarchies. PySide Qt bindings allow both free open source and proprietary software development and ultimately aim to support Qt platforms.
8.Termux
Termux is an Android terminal emulator and Linux environment app that works directly with no rooting or setup required. A minimal base system is installed automatically — additional packages are available using the APT package manager.
Источник
Полноценное Python приложение на Android
В этой статье я хотел бы рассказать о том, как создать полноценное приложение на 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.
Для разработки я бы рекомендовал использовать linux, тем более, apk собираются именно в этой OS.
Hello World выглядит так:
Причем этот код будет работать на всех заявленных платформах. Пропадает необходимость в тестировании приложения в эмуляторе. Достаточно запустить скрипт на исполнение в своей любимой IDE и увидеть результат на экране компьютера, без задержек на компиляцию, запуск эмулятора и пр. Если вы все же хотите увидеть как это будет выглядеть непосредственно на устройстве, просто установите Kivy Launcher, скопируйте файлы проекта на карту памяти и запустите. Дебажить при этом можно при помощи adb logcat.
Если вы используете библиотеку android, которой нет на PC, но хочется запускать приложение не только на android, воспользуйте такой конструкцией:
Сборка apk достаточно проста и описана на этой странице. После сборки релиза, достаточно подписать свое приложение (я использовал этот мануал) и выложить в google play.
Плюсы kivy:
- Быстрая разработка под различные платформы, практически без доработки кода.
- Доступен широкий выбор виджетов
- Высокая скорость работы. Весь ресурсоемкий вынесен в С модули. Сам интерпретатор python на android работает нативно.
- Фремворк включает в себя множество инструментов, например анимация, кеширование и пр.
- upd: Доступ к камере, буферу обмена, микрофону. Написать свой видеоплеер можно буквально за 20 строк.
Минусы kivy:
- Большой размер apk файла. Проект с 300 кб ресурсов (скрипты, графика) собирается в 7 мб apk. Хотя, думаю, есть возможность это как то оптимизировать.
- Невозможность (пока), восстанавливать работу после сворачивания — приложение закрывается
В следующей своей статье, я расскажу более подробно о процессе написания приложения «с нуля», расжевывая каждую строчку кода.
Хотелось бы сразу пресечь холивары на тему «для android только java, python не нужен». Я считаю, не важно, какие технологии «под капотом», главное чтоб приложение было качественным.
Сфера применения kivy может быть огромной. Сейчас на моем счету несколько приложений, написанных под заказ, где python с фремворком kivy показал себя с хорошей стороны. Например, ровно за один час, было написано приложение, для сети сервисных центров. Приложение работает в режиме киоска и установлено на дешевые китайские планшеты, которые висят в холле. Клиент набирает номер заказа, далее по WiFi планшет соединяется с сервером и сообщает статус заказа.
Источник
Как вызвать Python Из Java
Изучите наиболее распространенные способы вызова кода Python из Java.
Автор: Jonathan Cook
Дата записи
1. Обзор
Python становится все более популярным языком программирования, особенно в научном сообществе из-за его богатого разнообразия числовых и статистических пакетов. Поэтому нет ничего необычного в том, чтобы иметь возможность вызывать код Python из наших Java-приложений.
В этом уроке мы рассмотрим некоторые из наиболее распространенных способов вызова кода Python из Java.
2. Простой Скрипт На Python
В этом уроке мы будем использовать очень простой скрипт на Python, который мы определим в специальном файле с именем hello.py :
Предполагая, что у нас есть работающая установка Python, при запуске нашего скрипта мы должны увидеть напечатанное сообщение:
3. Ядро Java
В этом разделе мы рассмотрим два различных варианта, которые мы можем использовать для вызова нашего скрипта Python с использованием ядра Java.
3.1. Использование ProcessBuilder
Давайте сначала рассмотрим, как мы можем использовать API ProcessBuilder для создания собственного процесса операционной системы для запуска python и выполнения нашего простого сценария:
В этом первом примере мы запускаем команду python с одним аргументом, который является абсолютным путем к вашему hello.py сценарий. Мы можем найти его в нашей папке test/resources .
Подводя итог, мы создаем наш объект ProcessBuilder , передавая значения команды и аргумента конструктору. Также важно упомянуть вызов redirectErrorStream(true). В случае каких-либо ошибок вывод ошибок будет объединен со стандартным выводом.
Это полезно, поскольку означает, что мы можем считывать любые сообщения об ошибках из соответствующего вывода при вызове метода getInputStream() для объекта Process . Если мы не установим этому свойству значение true , то нам нужно будет считывать выходные данные из двух отдельных потоков, используя методы getInputStream() и getErrorStream () .
Теперь мы запускаем процесс с помощью метода start () , чтобы получить объект Process . Затем мы читаем выходные данные процесса и проверяем, что содержимое соответствует нашим ожиданиям.
Как уже упоминалось ранее, мы сделали предположение, что питон команда доступна через ПУТЬ переменная.
3.2. Работа Со Скриптовым Движком JSR-223
JSR-223 , который был впервые представлен в Java 6, определяет набор API-интерфейсов сценариев, которые обеспечивают базовую функциональность сценариев. Эти методы предоставляют механизмы для выполнения сценариев и обмена значениями между Java и языком сценариев. Основная цель этого стандарта состояла в том, чтобы попытаться привнести некоторое единообразие во взаимодействие с различными языками сценариев из Java.
Мы можем использовать подключаемую архитектуру скриптового движка для любого динамического языка при условии, конечно, что он имеет реализацию JVM . Jython – это реализация платформы Java Python, которая работает на JVM.
Предполагая , что у нас есть Jython в CLASSPATH , фреймворк должен автоматически обнаружить, что у нас есть возможность использовать этот механизм сценариев, и позволить нам напрямую запросить механизм сценариев Python.
Поскольку Jython доступен из Maven Central , мы можем просто включить его в ваш pom.xml :
Аналогично, он также может быть загружен и установлен напрямую.
Давайте перечислим все скриптовые движки, которые у нас есть в наличии:
Если у нас есть возможность использовать Jython, мы должны увидеть соответствующий скриптовый движок:
Теперь, когда мы знаем, что можем использовать скриптовый движок Jython, давайте продолжим и посмотрим, как вызвать hello.py скрипт:
Как мы видим, работать с этим API довольно просто. Во-первых, мы начнем с настройки ScriptContext , который содержит StringWriter . Это будет использоваться для хранения выходных данных скрипта, который мы хотим вызвать.
Затем мы используем метод getEngineByName класса ScriptEngineManager для поиска и создания скриптового движка для заданного короткого имени . В нашем случае мы можем передать python или jython , которые являются двумя короткими именами, связанными с этим движком.
Как и прежде, последний шаг-получить выходные данные из нашего скрипта и проверить, соответствует ли он тому, что мы ожидали.
4. Джайтон
Продолжая работу с Jython, у нас также есть возможность встраивать код Python непосредственно в наш Java-код. Мы можем сделать это с помощью класса Pythoninterpreter :
Использование класса PythonInterpreter позволяет нам выполнить строку исходного кода Python с помощью метода exec /. Как и прежде, мы используем StringWriter для захвата выходных данных этого выполнения.
Теперь давайте рассмотрим пример, где мы складываем два числа вместе:
В этом примере мы видим, как мы можем использовать метод get для доступа к значению переменной.
В нашем последнем примере Jython мы увидим, что происходит, когда возникает ошибка:
Когда мы запускаем этот код, возникает Исключение , и мы увидим ту же ошибку, как если бы мы работали с собственным Python:
Несколько моментов, которые мы должны отметить:
- Поскольку Интерпретатор Python реализует Автоклавируемый , рекомендуется использовать try-with-resources при работе с этим классом
- Имя класса PythonInterpreter не означает, что наш код Python интерпретируется. Программы Python в Python запускаются JVM и поэтому компилируются в байт-код Java перед выполнением
- Хотя Jython является реализацией Python для Java, он может содержать не все те же подпакеты, что и родной Python
5. Apache Commons Exec
Еще одной сторонней библиотекой, которую мы могли бы рассмотреть, является Apache Common Exec , которая пытается преодолеть некоторые недостатки API процесса Java|/.
Артефакт commons-exec доступен в Maven Central :
Теперь давайте посмотрим, как мы можем использовать эту библиотеку:
Этот пример не слишком отличается от нашего первого примера с использованием ProcessBuilder . Мы создаем объект командной строки для данной команды. Затем мы настроим обработчик потока, который будет использоваться для захвата выходных данных нашего процесса перед выполнением вашей команды.
Подводя итог, можно сказать, что основная философия этой библиотеки заключается в том, чтобы предложить пакет выполнения процессов, направленный на поддержку широкого спектра операционных систем с помощью согласованного API.
6. Использование HTTP для взаимодействия
Давайте сделаем шаг назад на мгновение и вместо того, чтобы пытаться напрямую вызывать Python, рассмотрим использование хорошо зарекомендовавшего себя протокола, такого как HTTP, в качестве уровня абстракции между двумя разными языками.
На самом деле Python поставляется с простым встроенным HTTP-сервером, который мы можем использовать для обмена контентом или файлами по HTTP :
Если мы сейчас перейдем к http://localhost:9000 , мы увидим содержимое каталога, в котором мы запустили предыдущую команду.
Некоторые другие популярные фреймворки, которые мы могли бы использовать для создания более надежных веб-сервисов или приложений на основе Python, Колба и Джанго .
Как только у нас есть конечная точка, к которой мы можем получить доступ, мы можем использовать любую из нескольких библиотек Java HTTP для вызова нашей реализации веб-службы/приложения Python.
7. Заключение
В этом уроке мы узнали о некоторых из самых популярных технологий для вызова кода Python из Java.
Как всегда, полный исходный код статьи доступен на GitHub .
Источник