Есть ли способ запустить Python на Android?

Мы работаем над версией S60, и у этой платформы есть хороший Python API.

Тем не менее, нет ничего официального о Python на Android, но поскольку Jython существует, есть ли способ, чтобы змея и робот работали вместе??

25 ответов

Решение

Одним из способов является использование Kivy:

Библиотека Python с открытым исходным кодом для быстрой разработки приложений, использующих инновационные пользовательские интерфейсы, такие как приложения multi-touch.

Kivy работает на Linux, Windows, OS X, Android и iOS. Вы можете запустить один и тот же код [python] на всех поддерживаемых платформах.

Приложение Kivy Showcase

Существует также новый проект Android Scripting Environment (ASE / SL4A). Он выглядит потрясающе и имеет некоторую интеграцию с нативными компонентами Android.

Примечание: больше не в "активной разработке", но некоторые вилки могут быть.

Да!: Среда сценариев Android

Пример через Matt Cutts через SL4A - "вот сканер штрих-кода, написанный в шести строках кода Python:

import android
droid = android.Android()
code = droid.scanBarcode()
isbn = int(code['result']['SCAN_RESULT'])
url = "http://books.google.com?q=%d" % isbn
droid.startActivity('android.intent.action.VIEW', url)

" Подмножество Pygame для Android - это порт подмножества функциональных возможностей Pygame для платформы Android. Цель проекта - создать игры для Android и упростить перенос игр с платформ, подобных ПК, на Android.".

Примеры включают в себя полную игру, упакованную в APK, что довольно интересно.

Как любитель Python и Android-программист, мне грустно говорить, что это не очень хороший путь. Есть две проблемы.

Одна из проблем заключается в том, что инструменты разработки для Android - это нечто большее, чем просто язык программирования. Многие графические элементы Android используют файлы XML для настройки дисплея, аналогично HTML. Встроенные Java-объекты действительно интегрированы с этим макетом XML, и гораздо проще, чем написать собственный код, перейти от логики к растровому изображению.

Другая проблема заключается в том, что G1 (и, возможно, другие устройства Android на ближайшее будущее) действительно не так быстры. Процессоры 200 МГц, а ОЗУ очень ограничено. Даже в Java вы должны сделать приличное количество переписывания, чтобы избежать создания большего количества объектов, если вы хотите сделать свое приложение идеально гладким. Python будет слишком медленным на мобильных устройствах.

Я разместил инструкции и патч для кросс-компиляции Python 2.7.2 для Android, вы можете получить его в моем блоге здесь: http://mdqinc.com/blog/2011/09/cross-compiling-python-for-android/

РЕДАКТИРОВАТЬ: я с открытым исходным кодом Ignifuga, мой 2D Game Engine, он основан на Python/SDL и кросс-компиляции для Android. Даже если вы не используете его для игр, вы можете получить полезные идеи из кода и утилиты для разработчиков (по имени Шафер, после Тима... вы знаете, кто).

Сценарий для Android

SL4A делает то, что вы хотите. Вы можете легко установить его прямо на свое устройство со своего сайта, и вам не нужен root.

Он поддерживает ряд языков. Питон самый зрелый. По умолчанию он использует Python 2.6, но вместо него есть порт 3.2. Я использовал этот порт для всех видов вещей на Galaxy S2, и он работал нормально.

API

SL4A предоставляет порт их android библиотека для каждого поддерживаемого языка. Библиотека предоставляет интерфейс к базовому API Android через единый Android объект.

from android import Android

droid = Android()
droid.ttsSpeak('hello world') # example using the text to speech facade

Каждый язык имеет почти одинаковый API. Вы даже можете использовать JavaScript API внутри веб-просмотров.

let droid = new Android();
droid.ttsSpeak("hello from js");

Пользовательские интерфейсы

Для пользовательских интерфейсов у вас есть три варианта:

  • Вы можете легко использовать родные, родные диалоги и меню через API. Это хорошо для диалогов подтверждения и других основных пользовательских вводов.
  • Вы также можете открыть веб-просмотр из скрипта Python, а затем использовать HTML5 для пользовательского интерфейса. Когда вы используете веб-просмотры из Python, вы можете передавать сообщения туда и обратно между веб-обзором и процессом Python, который его породил. Пользовательский интерфейс не будет нативным, но все равно это хороший вариант.
  • Существует некоторая поддержка собственных пользовательских интерфейсов Android, но я не уверен, насколько хорошо это работает; Я просто никогда не использовал это.

Вы можете смешивать параметры, чтобы иметь возможность просматривать веб-интерфейс для основного интерфейса и при этом использовать собственные диалоги.

QPython

Существует сторонний проект с именем QPython. Он основан на SL4A и добавляет некоторые другие полезные вещи.

QPython предоставляет вам более удобный пользовательский интерфейс для управления вашей установкой и включает небольшой сенсорный редактор кода, оболочку Python и оболочку PIP для управления пакетами. У них также есть порт Python 3. Обе версии доступны в магазине Play, бесплатно. QPython также связывает библиотеки из множества Python для проектов Android, включая Kivy, так что это не просто SL4A.

Обратите внимание, что QPython по-прежнему разрабатывает свой форк SL4A (хотя, честно говоря, не так много). Основной проект SL4A сам по себе практически мертв.

Полезные ссылки

Там также SL4A написана в большом количестве сотрудниками Google.

Вы можете использовать приложение Termux:

Обратите внимание, что apt install python install python 3. для python 2 вы должны вызвать apt install python2.

Некоторые демонстрации здесь: https://www.youtube.com/watch?v=fqqsl72mASE

А также страница GitHub: https://github.com/termux

Kivy


Я хочу опубликовать это как продолжение того, что @JohnMudd уже ответил (но, пожалуйста, потерпите меня, так как английский не мой родной язык)

С тех пор прошло много лет, и Киви превратилась в v1.9-dev. Самым большим преимуществом Kivy, на мой взгляд, является его кроссплатформенная совместимость. Вы можете кодировать и тестировать в своей локальной среде (Windows/*nix и т. Д.), А также создавать, отлаживать и упаковывать свое приложение для запуска на устройствах Android/iOS/Mac/Windows.

С помощью собственного языка Kivy KV вы можете легко кодировать и создавать интерфейс GUI (он похож на Java XML, но не на TextView и т. Д. KV имеет свой собственный ui.widgets для аналогичного перевода), который, на мой взгляд, довольно легко принять.

В настоящее время Buildozer и python-for-android являются наиболее рекомендуемыми инструментами для сборки / упаковки ваших приложений. Я попробовал их обоих и могу твердо сказать, что они делают создание приложений для Android с Python быстрым. Пользователи, которые чувствуют себя комфортно в своей консоли / терминале / командной строке, не должны иметь проблем с их использованием, и их руководства также хорошо документированы.

Кроме того, iOS является еще одним важным преимуществом Kivy, при условии, что вы можете использовать одну и ту же кодовую базу с небольшими изменениями, необходимыми для тестирования на вашем устройстве iOS, с помощью инструментов kivy-ios Homebrew, хотя Xcode требуется для сборки перед запуском на их устройства (AFAIK Симулятор iOS в Xcode в настоящее время не работает для сборки архитектуры x86). Есть также некоторые проблемы с зависимостями, которые нужно вручную скомпилировать и поиграть в XCode, чтобы иметь успешную сборку, но их не составит труда решить, и люди из Kivy Google Group тоже очень полезны.

Несмотря на все сказанное, пользователи с хорошими знаниями Python не должны испытывать трудностей в освоении основ за несколько недель (если не дней) для создания простых приложений.

Также стоит отметить, что вы можете связывать (собирать рецепты) свои модули Python со сборкой, чтобы пользователи могли реально использовать многие существующие библиотеки, которые предоставляет нам Python, такие как Requests & PIL и т. Д., С помощью поддержки расширений Kivy.

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

И последнее, но не менее важное: если вы собираетесь использовать Kivy для более серьезных / коммерческих проектов, существующие модули могут оказаться неудовлетворительными. Тем не менее, есть несколько выполнимых решений с "незавершенным" pyjnius для Android и pyobjus. Теперь пользователи могут получить доступ к классам Java/Objective-C через эти модули для управления некоторыми нативными API.

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

Я надеюсь, что некоторые программисты приложений на Python найдут эту информацию полезной и начнут смотреть на Kivy. Это может стать лучше (с большей поддержкой и портированием библиотек / модулей), если есть большой интерес со стороны сообщества.

PS У меня нет никаких отношений с Kivy, я просто программист, которому действительно нравится идея привнести удовольствие от программирования на Python в мобильную / кроссплатформенную разработку.

Не сейчас, и вам повезет, что Jython скоро заработает. Если вы планируете начать разработку прямо сейчас, вам лучше сейчас просто придерживаться Java.

Используя SL4A (о котором уже говорилось в других ответах), вы можете запустить полноценный экземпляр web2py (другие веб-фреймворки python также являются вероятными кандидатами). SL4A не позволяет вам создавать собственные компоненты пользовательского интерфейса (кнопки, полосы прокрутки и т. П.), Но он поддерживает WebView. WebView - это в основном не более чем урезанный веб-браузер, направленный на фиксированный адрес. Я считаю, что нативное приложение Gmail использует WebView вместо обычного маршрута виджетов.

Этот маршрут будет иметь некоторые интересные особенности:

  • В случае большинства веб-фреймворков Python вы можете разрабатывать и тестировать без использования устройства Android или эмулятора Android.
  • Какой бы код Python вы ни написали для телефона, он также может быть размещен на общедоступном веб-сервере с минимальными изменениями (если таковые имеются).
  • Вы можете воспользоваться всеми этими сумасшедшими вещами в сети: запрос, HTML5, CSS3 и т. Д.

Я использую приложение QPython. У него есть редактор, консоль, и вы можете запускать с ним ваши программы на Python. Приложение бесплатное, ссылка - http://qpython.com/.

В playstore есть приложение под названием QPython3, которое можно использовать как для редактирования, так и для запуска скрипта Python.

Playstore ссылка

Другое приложение под названием Termux, в котором вы можете установить python с помощью команды

pkg install python

Playstore Link

С сайта Python для Android:

Python для android - это проект по созданию собственного дистрибутива Python, включающего в себя необходимые модули, и создания apk, включающего python, libs и ваше приложение.

Chaquopy

Chaquopy - это плагин для системы сборки Android Studio, основанной на Gradle. Он ориентирован на тесную интеграцию со стандартными инструментами разработки Android.

  • Он предоставляет полные API для вызова Java из Python или Python из Java, что позволяет разработчику использовать любой язык, который лучше всего подходит для каждого компонента их приложения.

  • Он может автоматически загружать пакеты PyPI и встраивать их в приложение, включая выбранные собственные пакеты, такие как NumPy.

  • Он обеспечивает полный доступ ко всем API-интерфейсам Android из Python, в том числе к инструментарию собственного интерфейса пользователя ( пример действия чисто Python).

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

(Я создатель этого продукта.)

Еще одна попытка: https://code.google.com/p/android-python27/

Этот встраивает непосредственно интерпретатор Python в ваше приложение apk.

Вы можете запустить свой код Python, используя sl4a. sl4a поддерживает Python, Perl, JRuby, Lua, BeanShell, JavaScript, Tcl и сценарий оболочки.

Вы можете изучить Примеры Python sl4a.

Вы можете использовать QPython:

Он имеет консоль Python, редактор, а также управление пакетами / установщики

http://qpython.com/

Это проект с открытым исходным кодом с реализациями Python 2 и Python 3. Вы можете скачать исходный код и файлы Android .apk прямо с github.

QPython 2: https://github.com/qpython-android/qpython/releases

QPython 3: https://github.com/qpython-android/qpython3/releases

Посмотрите на BeeWare. На момент ответа на этот вопрос он все еще находится на ранней стадии разработки. Его целью является создание собственных приложений на Python для всех поддерживаемых операционных систем, включая Android.

Другой вариант, если вы ищете 3.4.2 или 3.5.1 - это архив на GitHub.

Python3-Android 3.4.2 или Python3-Android 3.5.1

В настоящее время он поддерживает Python 3.4.2 или 3.5.1 и 10d версию NDK. Он также может поддерживать 3,3 и 9с, 11с и 12

Приятно, что вы просто скачиваете его, запускаете make и получаете.so или.a

В настоящее время я использую это для запуска сырого Python на устройствах Android. С парой модификаций в файлах сборки вы также можете сделать x86 и armeabi 64 битными

Я не видел этого здесь, но вы можете сделать это с помощью Pyside и Qt теперь, когда Qt работает на Android благодаря Necessitas.

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

http://qt-project.org/wiki/PySide_for_Android_guide

Также есть python-on-a-chip, на котором можно запустить mosync: группа Google

Похоже, еще одна опция - это pyqtdeploy, которая ссылается на документы:

инструмент, который в сочетании с другими инструментами, предоставляемыми в Qt, позволяет развертывать приложения PyQt4 и PyQt5, написанные на Python v2.7 или Python v3.3 или новее. Он поддерживает развертывание на настольные платформы (Linux, Windows и OS X) и на мобильные платформы (iOS и Android).

Согласно Развертыванию приложения PyQt5 на Android через pyqtdeploy и Qt5, оно активно разрабатывается, хотя трудно найти примеры работающих приложений для Android или учебное пособие о том, как кросс-компилировать все необходимые библиотеки для Android. Это интересный проект, чтобы иметь в виду, хотя!

Посмотрите на enaml-native, который использует концепцию реагирования- натива и применяет его к python.

Он позволяет пользователям создавать приложения с нативными виджетами Android и предоставляет API для использования библиотек Android и Java из Python.

Он также интегрируется с android-studio и имеет несколько приятных функций dev, таких как перезагрузка кода и удаленная отладка.

Другие вопросы по тегам