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

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

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

2 089
0
659 708
23
Перейти к ответу Данный вопрос помечен как решенный

Ответы 23

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

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

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

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

На телефоне Android нет ни одного java-слова, оно компилируется в байтовый код в процессе упаковки. Проблема не в скорости: Google может предоставить инструменты для создания правильного байтового кода из кода Python (например, для Jython). Кстати, Dalvik - это не виртуальная машина Java, поэтому речь идет не о Java VS Python.

e-satis 02.11.2008 21:20

Байт-код JAVA по-прежнему должен обрабатываться JVM, а языку Java в любом случае требуется сборщик мусора. Фактическая скорость могла исходить только от C++.

LtWorf 29.04.2014 15:40

@Touzen Еще 2 года спустя мы используем процессор Intel Atom или восьмиъядерные процессоры. ;)

Rohan Kandwal 10.04.2015 09:13

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

Evgeni Sergeev 05.12.2015 09:05

Кстати, в наши дни Google продвигает Kotlin - который является довольно неизвестным для большинства пользователей языком - ясно, что можно поддерживать другие языки, кроме Java (я разработчик Java и поклонник Python). Так что я думаю, что ответ скорее политический, чем практический.

Alex 11.07.2018 15:55

@Alex Честно говоря, Kotlin изначально запускается и компилируется на JVM, поэтому его интеграция намного проще, чем язык без JVM.

Kjeld Schmidt 02.03.2019 17:41

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

Пример через Мэтта Каттса через 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)

с / ДА / мех. возможно / ... это чрезвычайно ограничено. что-нибудь графическое или мультитач? большое НЕТ.

gcb 23.10.2010 13:09

@gcb вы не можете использовать обычный набор виджетов Android, но можете использовать «веб-просмотры» (например, то, что использует собственное приложение Gmail).

gdw2 16.03.2012 20:10

в гольф: import android as a;d=a.Android();d.startActivity('android.intent.action.VIEW'‌​,"http://books.googl‌​e.com?q=%d"%int(d.sc‌​anBarcode()['result'‌​]['SCAN_RESULT']))

Alex L 28.12.2012 10:20

@ gdw2, конечно же, родное приложение Gmail использует WebView только для синтаксического анализа писем, но не для фактического пользовательского интерфейса. Это делает сравнение немного абсурдным.

Veselin Romić 22.07.2014 01:55

@unmounted, когда я импортирую android в свой скрипт python, он не говорит, что модуль с именем android. при попытке установить - pip3 install android я получаю сообщение об ошибке, что нет такого модуля. как вы импортировали андроид из этого скрипта Python?

riki 19.11.2020 13:06

@riki, вы не сможете сделать это на своем компьютере - ваш компьютер не Android, поэтому вы не можете импортировать модуль, который на нем работает. Что бы вы ожидали, например, droid.startActivity, что делать на компьютере, не имеющем понятия «деятельность»?

lights0123 21.12.2020 02:15

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

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

Верно, но у них должна быть установлена ​​ASE, это не решение, которое позволяет вам писать Android-приложение на python без чего-либо уже установленного (обычный пользователь будет все: «Что это за ASE?»)

Stuart Axon 26.11.2010 21:30

Кроме того, ASE - это ограниченная среда; вы не можете писать полноценные приложения для Android, даже если ASE предварительно установлена. См. stackoverflow.com/questions/2076381

Sridhar Ratnakumar 24.01.2011 00:36

Думаю его переименовали в SL4A.

Vanuan 05.12.2012 01:25

Вы можете писать приложения, упаковывать их и даже продавать их в Play Store, если хотите, с SL4A сейчас. Это хорошо, так как комментарии выше были опубликованы. Если вам нужен Python для Android, то PY4A, работающий на SL4A, вероятно, лучший выбор.

Carl Smith 09.03.2013 21:53

Подтверждаю, SL4A теперь позволяет писать готовые к использованию пакеты приложений, я пробовал с perl, он работает

ubugnu 01.03.2015 18:32

Я нашел следующую статью очень полезной в этом отношении. zdnet.com/article/…

Favour Felix Chinemerem 23.05.2020 06:37

Подмножество Pygame для Android

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

...a port of a subset of Pygame functionality to the Android platform. The goal of the project is to allow the creation of Android-specific games, and to ease the porting of games from PC-like platforms to Android.

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

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

gdw2 06.10.2011 01:56

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

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

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

Впечатляющий. +1 за это. Не принято, потому что с этим вы не можете писать что-либо для публики.

e-satis 13.10.2011 18:14

Если вы имеете в виду, что вы не можете делать с ним графические приложения, вы определенно можете, конечно, требуется дополнительная работа. На самом деле я использую этот порт в сочетании с SDL 1.3, перейти от интерпретатора Python к интерактивному приложению нетривиально, но это можно сделать.

gabomdq 14.10.2011 06:38
Ответ принят как подходящий

Один из способов - использовать Киви:

Open source Python library for rapid development of applications that make use of innovative user interfaces, such as multi-touch apps.

Kivy runs on Linux, Windows, OS X, Android and iOS. You can run the same [python] code on all supported platforms.

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

Если вы используете Kivy, вот инструмент, который поможет упаковать ваш проект в APK: github.com/kivy/python-for-android

gdw2 09.01.2012 08:42

@julio Никогда не было возможности проверить это. Вместо этого мы в основном делаем веб-приложения, используя jquery mobile.

e-satis 23.01.2012 18:08

На прошлой неделе я играл с Киви, пытаясь написать игру. Их основные разработчики очень быстро ответили на вопросы по IRC, однако, если вы запрограммировали графический интерфейс до того, как Kivy заставит вас немного сказать WTF. Некоторые примеры недокументированных вещей, которые были для меня странными: все виджеты получают каждое событие on_touch_down, даже если событие произошло за пределами их региона, ни один виджет не имеет метода draw (), почти все происходит через настраиваемый шаблон наблюдателя в настраиваемых свойствах, которые они создали ( обратите внимание, что они имеют общее имя со свойством Python, но не совпадают)

Trey Stout 31.01.2012 00:41

@Trey: А что насчет вещей, не связанных с графическим интерфейсом? Есть ли ограничения на использование модулей Python? Как насчет доступа к специфичным для Android функциям, таким как возможность читать сообщения, добавлять уведомления, работать в фоновом режиме, делать фото, читать список контактов, определять местоположение по GPS и т. д.?

Tadeck 24.03.2012 08:20

И теперь есть поддержка iOS!

rubik 30.06.2012 11:00

Теперь, почти год спустя, разве поддержка лучше? Были ли здесь заметные улучшения?

TankorSmash 17.11.2012 06:32

Чтобы ответить на старый вопрос @Tadeck: Kivy имеет прямой доступ к особенностям Android через Pyjnius и (для более питонической оболочки) плиер. Вы также можете использовать практически любой чистый модуль Python или модули со скомпилированными компонентами, если вы пишете (или уже существует) рецепт python для Android - у нас уже есть рецепты для многих популярных модулей, таких как numpy, sqlalchemy и даже django.

inclement 11.08.2015 20:29

@ gdw2 Можете ли вы упаковать Pyglet с помощью python-for-android или он поддерживает только Kivy?

Is_this_my_username 11.12.2020 21:18

Что касается ограничений, одним огромным недостатком Kivy остается отсутствие возможности ввода текста, который принимает предложения встроенной клавиатуры с клавиатуры вашего устройства (например, Gboard / Swiftkey). Вы получаете только клавиатуру типа электронной почты / пароля, которая не предлагает предложений. В течение нескольких недель пытался найти решение, включая изменение исходного кода java, где он был отключен, но без кубиков (все еще не работает). Действительно огромный ограничивающий фактор, хотя я действительно не использую предложения клавиатуры, любой, кто использует приложение, которое я сделал, всегда является их первым вопросом, ха-ха "почему нет предложений / автокоррекции?"

nihilok 09.03.2021 20:27

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

У этого маршрута было бы несколько интересных особенностей:

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

Cherrypy хорошо работает с поддержкой ws4py websocket. Бутылка тоже хороша на SL4A.

Carl Smith 13.02.2013 05:28

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

Python for android is a project to create your own Python distribution including the modules you want, and create an apk including python, libs, and your application.

@ e-satis: Спасибо за ваш комментарий. Я не понимаю, какой ответ дублирую. Могу только догадываться, что вы думаете, что PFA это то же самое, что и Киви. Хотя он размещен в рамках проекта Kivy, вам даже не нужно использовать Kivy для использования PFA.

gdw2 10.01.2012 02:46

Отметьте удаленный ответ @tito в нижней части PFA. Кроме того, малоинтересно запускать PFA без kivy, поскольку это единственный инструментарий, который у вас есть.

e-satis 10.01.2012 04:55

Это не потому, что kivy в настоящее время является единственным доступным набором инструментов (некоторые люди работают над интеграцией других), а не потому, что это его дубликат. Пожалуйста, рассматривайте остальные варианты как есть, а не объединяйте все в один пост: |

tito 16.03.2012 18:34

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

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

Он поддерживает ряд языков. Python - самый зрелый. По умолчанию он использует 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 Store бесплатно. QPython также объединяет библиотеки из группы Python для проектов Android, включая Kivy, так что это не просто SL4A.

Обратите внимание, что QPython все еще разрабатывает свою вилку SL4A (хотя, честно говоря, не очень). Сам основной проект SL4A практически мертв.

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

Можете ли вы использовать любой из них для запуска скрипта Python из терминала или таскера? Я не могу найти способ :(

Pitto 26.08.2015 14:27

Вы можете запустить сценарий SL4A из Tasker. На эта страница есть несколько примеров, в которых есть фрагменты Python, запускаемые из Tasker. Но на самом деле это совсем другой вопрос.

Carl Smith 01.09.2015 22:05

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

Этот встраивает интерпретатор Python напрямую в apk вашего приложения.

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

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

QPython

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

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

swdev 07.10.2013 18:36

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

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

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

Киви

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

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

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

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

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

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

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

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

Python3-Android 3.4.2 или Python3-Android 3.5.1

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

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

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

Еще один вариант, кажется, pyqtdeploy, который ссылается на документы:

a tool that, in conjunction with other tools provided with Qt, enables the deployment of PyQt4 and PyQt5 applications written with Python v2.7 or Python v3.3 or later. It supports deployment to desktop platforms (Linux, Windows and OS X) and to mobile platforms (iOS and Android).

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

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

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

http://qpython.com/

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

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

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

Termux

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

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

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

James 29.07.2018 06:57

Здесь - это некоторые инструменты, перечисленные на официальном сайте Python.


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

Ссылка на PlayStore


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

pkg install python

Ссылка на PlayStore


Если вы хотите разрабатывать приложения, есть Уровень сценариев Python для Android (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 SDK Python для Android


Anddd ... BeeWare

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.

используя Termux, вы также можете установить python 2 $ apt install python2

M.Hefny 16.07.2017 04:53

Взгляните на BeeWare. Он значительно вырос. Он награждается образовательным грантом PSF (Python Software Foundation).

Цель Beeware - создать собственные приложения с Python для всех поддерживаемых операционных систем, включая Android.

Официальный веб-сайт: Остерегайтесь

Репозиторий Github: https://github.com/beeware

Чем отличается Той Киви? Это стабильный портативный Python Gui на основе

Carsten Thielepape 16.02.2020 21:47

Ознакомьтесь с родной, который использует концепцию react-native и применяет ее к python.

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

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

Chaquopy

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

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

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

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

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

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

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