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

2092

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

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

е-удовлетворяться
источник

Ответы:

1061

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

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

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

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

JohnMudd
источник
63
Если вы используете Kivy, вот инструмент, который поможет упаковать ваш проект в APK: github.com/kivy/python-for-android
gdw2
17
На прошлой неделе я играл с Киви, пытаясь написать игру. Их основные разработчики очень быстро ответили на вопросы по IRC, однако, если вы запрограммировали графический интерфейс до того, как Kivy заставит вас немного сказать WTF. Некоторые примеры недокументированных вещей, которые были для меня странными: все виджеты получают каждое событие on_touch_down, даже если событие произошло за пределами их региона, ни у одного виджета нет метода draw (), почти все происходит через собственный шаблон наблюдателя в пользовательских свойствах, которые они составили ( обратите внимание, что они разделяют имя с собственностью Python, но не совпадают)
Trey Stout
7
@Trey: А как насчет вещей, не связанных с GUI? Есть ли какие-либо ограничения в отношении использования модулей Python? А как насчет доступа к функциям Android, таким как способность читать сообщения, добавлять уведомления, работать в фоновом режиме, делать фотографии, читать список контактов, определять местоположение GPS и т. Д.?
Tadeck
7
И теперь есть поддержка iOS тоже!
Рубик
16
Теперь, почти через год, поддержка лучше? Были ли какие-либо заметные улучшения?
TankorSmash
347

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

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

Heat Miser
источник
70
Да, но у них должна быть установлена ​​ASE, это не решение, которое позволяет вам написать приложение для Android на python без чего-либо уже установленного (нормальный пользователь будет всем «что за штука ASE?»)
Стюарт Аксон,
20
Кроме того, ASE является ограниченной средой; Вы не можете писать полноценные приложения для Android, даже если ASE уже установлена. См stackoverflow.com/questions/2076381
Шридхар Ratnakumar
10
Я думаю, что это было переименовано в SL4A.
Вануан
9
Вы можете писать приложения, упаковывать их и даже продавать их в Play Store, если хотите, с SL4A сейчас. Это хорошо, так как комментарии выше были опубликованы. Если вы хотите использовать Python для Android, то PY4A, который работает на SL4A, вероятно, является лучшим выбором.
Карл Смит
2
Подтверждаю, SL4A теперь позволяет писать готовые к использованию пакеты приложений, я пытался с помощью Perl, он работает
Ubugnu
216

Да! : Среда сценариев 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)
неокантованный
источник
46
с / ДА / Мех. возможно / ... это чрезвычайно ограничено. что-нибудь графическое или мультитач? большое НЕТ.
ГКБ
2
@gcb вы не можете использовать обычный набор виджетов для Android, но вы можете использовать «webviews» (например, это то, что использует нативное приложение gmail).
gdw2
28
игра в гольф:import android as a;d=a.Android();d.startActivity('android.intent.action.VIEW',"http://books.google.com?q=%d"%int(d.scanBarcode()['result']['SCAN_RESULT']))
Алекс Л
12
@ gdw2, конечно же, родное приложение Gmail использует только WebView для анализа электронной почты, но не для реального пользовательского интерфейса. Это делает сравнение немного абсурдным.
Веселин Ромич
88

Pygame Subset для Android

Pygame - это 2D игровой движок для Python (на рабочем столе), который популярен среди новых программистов. Pygame Subset для Android описывает себя как ...

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

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

muriloq
источник
4
На моем Droid X было сломано несколько аспектов (кнопки или сенсорный экран, не помню), поэтому я не продвинулся слишком далеко с этим маршрутом.
gdw2
78

Кросс-компиляция и Игнифуга

В моем блоге есть инструкции и патч для кросс-компиляции Python 2.7.2 для Android.

Я также открыл Ignifuga , мой 2D Game Engine. Он основан на Python / SDL и кросс-компилируется для Android. Даже если вы не используете его для игр, вы можете получить полезные идеи из утилиты для кода или сборщика (по имени Шейфер , в честь Тима ... вы знаете, кто).

gabomdq
источник
4
Впечатляет. +1 за это. Не принято, потому что вы ничего не можете написать для публики с этим.
Э-Сат
1
Если вы имеете в виду, что не можете создавать графические приложения с ним, вы, безусловно, можете, конечно, больше работать. Я на самом деле использую этот порт в сочетании с SDL 1.3, переходить от интерпретатора python к интерактивному приложению нетривиально, но это можно сделать.
gabomdq
77

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

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

Он поддерживает ряд языков. Питон самый зрелый. По умолчанию он использует 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 сам по себе практически мертв.

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

Карл Смит
источник
1
Можете ли вы использовать любой из них для запуска скрипта Python из терминала или Tasker? Я не могу найти способ :(
Питто
1
Вы можете запустить скрипт SL4A из Tasker. На этой странице есть несколько примеров, в которых есть фрагменты Python, запускаемые из Tasker. Это действительно совсем другой вопрос.
Карл Смит
77

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

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

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

лакировать
источник
48
На телефоне Android нет ни одного java-слова, оно компилируется в байт-код в процессе упаковки. Скорость не в этом: Google может предоставить инструменты для создания правильного байтового кода из кода Python (например, для Jython). Кстати, Dalvik - это не Java VM, так что речь идет не о Java VS Python.
Э-Удовлетворение
6
Байт-код JAVA все еще должен обрабатываться JVM, а язык Java в любом случае требует сборщика мусора. Фактическая скорость может исходить только от C ++.
LtWorf
19
@ Еще через два года мы используем процессоры Intel Atom или восьмиъядерные процессоры. ;)
Рохан Кандвал
2
Из-за разницы в мощности, которую они могут использовать, телефоны всегда будут на порядок медленнее, чем настольные компьютеры. Тем не менее, не отказывайтесь от Python для мобильного устройства, потому что, как правило, только часть кода отвечает за интенсивную работу процессора, и эту долю можно оптимизировать, переписав его на другом языке.
Евгений Сергеев
2
Кстати, в наши дни Google подталкивает Kotlin - это довольно неизвестный язык для большинства пользователей - ясно, что возможно поддерживать другие языки, кроме Java (я - разработчик Java и фанат Python). Поэтому я думаю, что ответ скорее политический, чем практический.
Алекс
49

Kivy

Я хотел добавить к тому, что @JohnMudd написал о Киви. Прошли годы с тех пор, как он описал ситуацию, и Киви существенно изменилась.

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

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

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

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

Учитывая все это, пользователи с хорошими знаниями Python не должны иметь проблем с быстрым освоением основ.

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

Anzel
источник
Я только что скачал Kivy со своего сайта. Демонстрирует поддержку 32- и 64-битного Python 3.4 и демонстрацию работы сенсорного ввода.
codeReview
1
@codeReview, я использую Kivy только с Python2 и у меня нет опыта работы с Python3, все работает нормально?
Анзель
Я дам вам знать, надеюсь, скоро. Но у меня нет опыта работы с Python за пределами .py файлов командной оболочки CPython 3.4 для быстрого решения вычислительных или алгоритмических задач. Это будет мое первое приложение с графическим интерфейсом. Мне нужно было прочитать больше документации, понять язык Kivy и внимательно следить за шагами по установке, чтобы я знал, как установить Kivi в свою выбранную Python IDE и упаковать APK для отправки на Android. Это многоэтапный процесс, поэтому я не могу сказать, что это произойдет очень скоро.
codeReview
1
@codeReview, удачи в твоем путешествии. Если это ваше первое приложение, я настоятельно рекомендую использовать .kv в качестве файла макета. Это как файл yaml или просто дерево для определения виджетов макета. Если ваше приложение имеет несколько экранов / макетов, используйте, так ScreenManagerкак это сэкономит вам массу времени. Также советую прочитать их список рассылки, группа знающих людей, готовых помочь вам.
Анзель
1
@codeReview, также, вместо того, чтобы учиться в демонстрационном приложении Kivy, вы можете получить больше информации о поиске некоторых существующих приложений Kivy и увидеть, как люди управляют «виджетами» и обратными вызовами в реальном сценарии. Kivy совсем не сложно изучать, я скажу, что с точки зрения кривой обучения гораздо проще, чем, скажем, в Java + Android или target-C + iOS
Anzel
40

Termux

Вы можете использовать приложение Termux , которое предоставляет среду POSIX для Android, для установки Python.

Обратите внимание, что apt install pythonPython3 будет установлен на Termux. Для Python2 вам нужно использовать apt install python2.

Адриан Станкулеску
источник
5
+1 для Termux. Абсолютно прекрасная среда для работы. Отличный выбор пакетов в репозиториях, удобные сочетания клавиш регулировки громкости. Это самая близкая вещь к Debian по телефону, который я когда-либо нашел.
Джеймс
39

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

Илья Кочетов
источник
39

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

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

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

QPython

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

Кайл К
источник
2
Теперь qpython добавил поддержку Django! Это все что мне нужно! Удивительно!
swdev
27

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

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

gdw2
источник
1
@ E-удовлетворительно: спасибо за ваш комментарий. Я не вижу, какой ответ я дублирую. Я могу только догадываться, что вы думаете, что PFA такой же, как Kivy. Хотя он размещен в рамках проекта Kivy, вам даже не нужно использовать Kivy для использования PFA.
gdw2
Проверьте удаленный ответ @ tito в нижней точке PFA. Кроме того, мало интереса к запуску PFA без kivy, поскольку это единственный доступный вам инструментарий.
е-удовлетворяться
Это не потому, что kivy в настоящее время является единственным доступным инструментарием (некоторые люди работают над интеграцией других), а не его дубликат. Пожалуйста, рассмотрите другие варианты как есть, и не объединяйте все в один пост: |
Тито
21

Chaquopy

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

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

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

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

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

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

mhsmith
источник
20

Вот некоторые инструменты, перечисленные на официальном сайте Python


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

Playstore ссылка


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

pkg install python

Playstore Link


Если вы хотите разрабатывать приложения, есть Python Android Scripting Layer ( SL4A ) .

The Scripting Layer for Android, SL4A, is an open source application that allows programs written in a range of interpreted languages to run on Android. It also provides a high level API that allows these programs to interact with the Android device, making it easy to do stuff like accessing sensor data, sending an SMS, rendering user interfaces and so on.


Вы также можете проверить PySide для Android , который на самом деле является привязками Python для Qt 4.


Существует платформа под названием PyMob, где приложения могут быть написаны исключительно на Python, а поток инструментов компилятора (PyMob) преобразует их в исходные коды для различных платформ.


Также проверьте Python для Android

python-for-android is an open source build tool to let you package Python code into standalone android APKs. These can be passed around, installed, or uploaded to marketplaces such as the Play Store just like any other Android app. This tool was originally developed for the Kivy cross-platform graphical framework, but now supports multiple bootstraps and can be easily extended to package other types of Python apps for Android.


Попробуйте Chaquopy Python SDK для Android


Anddd ... Пчела

BeeWare allows you to write your app in Python and release it on multiple platforms. No need to rewrite the app in multiple programming languages. It means no issues with build tools, environments, compatibility, etc.

pz64_
источник
2
с помощью Termux вы также можете установить python 2 $ apt install python2
M.Hefny
16

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

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

Hitul
источник
13

Вы можете использовать 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

ode2k
источник
12

Другой вариант, если вы ищете 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 битными

GR посланник
источник
11

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

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

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

radix07
источник
9

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

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

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

Анджей Пронобис
источник
6

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

DrawT
источник
Какая разница, кой Киви? Это стабильный портативный Python на основе
графического
5

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

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

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

frmdstryr
источник