¿Hay alguna forma de ejecutar Python en Android?

2088

Estamos trabajando en una versión S60 y esta plataforma tiene una agradable API de Python.

Sin embargo, no hay nada oficial sobre Python en Android, pero dado que Jython existe, ¿hay alguna manera de permitir que la serpiente y el robot trabajen juntos?

1140

Una forma es usar Kivy :

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.

Aplicación Kivy Showcase

9
  • 68
    Si usa Kivy, aquí hay una herramienta para ayudarlo a empaquetar su proyecto en un APK: github.com/kivy/python-for-android
    gdw2
    9 de enero de 2012 a las 4:42
  • 21
    Estuve jugando con Kivy la semana pasada intentando escribir un juego. Sus principales desarrolladores fueron muy rápidos en responder preguntas sobre IRC, sin embargo, si ha programado una GUI antes de Kivy, lo hará decir WTF bastante. Algunos ejemplos de cosas indocumentadas que fueron extrañas para mí: Todos los widgets obtienen cada evento on_touch_down incluso si el evento ocurrió fuera de su región, Ningún widget tiene un método draw (), casi todo sucede a través de un patrón de observador personalizado en las Propiedades personalizadas que inventaron ( tenga en cuenta que estos comparten el nombre con la propiedad de Python, pero no son lo mismo) 30/01/12 a las 20:41
  • 8
    @Trey: ¿Qué pasa con las cosas no relacionadas con la GUI? ¿Existe alguna limitación con respecto al uso de los módulos de Python? ¿Qué pasa con el acceso a funciones específicas de Android, como la capacidad de leer mensajes, agregar notificaciones, trabajar en segundo plano, hacer una foto, leer la lista de contactos, determinar la ubicación del GPS, etc.?
    Tadeck
    24 de marzo de 2012 a las 4:20
  • 8
    ¡Y ahora también hay soporte para iOS!
    rubik
    30 de junio de 2012 a las 7:00
  • 17
    Ahora, casi un año después, ¿es mejor el soporte? ¿Ha habido mejoras notables? 17/11/12 a las 2:32
362

También está el nuevo proyecto Android Scripting Environment (ASE / SL4A). Se ve increíble y tiene cierta integración con componentes nativos de Android.

Nota: ya no está en "desarrollo activo", pero algunas bifurcaciones pueden estarlo.

6
  • 71
    Es cierto, pero tienen que tener ASE instalado, no es una solución que te permita escribir una aplicación de Android en Python sin nada ya instalado (el usuario normal será todo "¿qué pasa con ASE?) 26/11/10 a las 18:30
  • 21
    Además, ASE es un entorno restringido; no puede escribir aplicaciones Android completas incluso si ASE está preinstalado. Ver stackoverflow.com/questions/2076381 23/01/11 a las 21:36
  • 11
    Creo que se le cambió el nombre a SL4A.
    Vanuan
    4/12/12 a las 21:25
  • 10
    Puede escribir aplicaciones, empaquetarlas e incluso venderlas en Play Store si lo desea, con SL4A hoy en día. Ha ido bien desde que se publicaron los comentarios anteriores. Si desea Python en Android, entonces PY4A, que se ejecuta en SL4A, es probablemente la mejor opción. 9 de marzo de 2013 a las 17:53
  • 3
    Lo confirmo, SL4A ahora permite escribir paquetes de aplicación listos para usar, probé con perl funciona
    ubugnu
    1/03/15 a las 15:32
227

¡Sí! : Entorno de secuencias de comandos de Android

Un ejemplo a través de Matt Cutts a través de SL4A: "aquí hay un escáner de código de barras escrito en seis líneas de código 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)
6
  • 47
    s / SÍ / meh. tal vez / ... es extremadamente limitado. ¿algo gráfico o multitáctil? un gran NO.
    gcb
    23/10/10 a las 9:09
  • 4
    @gcb no puede usar el conjunto de widgets de Android normal, pero puede usar "vistas web" (que es lo que usa la aplicación nativa de Gmail, por ejemplo).
    gdw2
    16 de marzo de 12 a las 16:10
  • 29
    jugado al golf: 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']))
    Alex L
    28/12/12 a las 6:20
  • 14
    @ gdw2, seguramente la aplicación nativa de Gmail solo usa WebViews para analizar correos electrónicos, no para la interfaz de usuario real. Eso hace que la comparación sea un poco absurda. 21/07/2014 a las 21:55
  • @unmounted, cuando importo Android en mi script de Python, dice que no hay ningún módulo llamado Android. cuando intento instalar pip3 instalar android, aparece un error que dice que no hay ningún módulo como este. ¿Cómo importaste Android o este script de Python?
    riki
    19 nov.20 a las 10:06
94

Pygame Subset para Android

Pygame es un motor de juegos 2D para Python (en el escritorio) que es popular entre los nuevos programadores. El subconjunto de Pygame para Android se describe a sí mismo como ...

...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.

Los ejemplos incluyen un juego completo empaquetado como APK, lo cual es bastante interesante.

1
  • 5
    Varios aspectos se rompieron en mi Droid X (botones, o pantalla táctil, no puedo recordar), así que no llegué muy lejos con esta ruta.
    gdw2
    5/10/11 a las 21:56
90

Como amante de Python y programador de Android, me entristece decir que este no es un buen camino a seguir. Hay dos problemas:

Un problema es que hay mucho más que un lenguaje de programación para las herramientas de desarrollo de Android. Muchos de los gráficos de Android involucran archivos XML para configurar la pantalla, similar a HTML. Los objetos java incorporados están integrados con este diseño XML, y es mucho más fácil que escribir su código para pasar de la lógica al mapa de bits.

El otro problema es que el G1 (y probablemente otros dispositivos Android en el futuro cercano) no son tan rápidos. Los procesadores de 200 MHz y la RAM son muy limitados. Incluso en Java, debe hacer una cantidad decente de reescritura para evitar la creación de más objetos si desea que su aplicación sea perfectamente fluida. Python va a ser demasiado lento durante un tiempo aún en dispositivos móviles.

6
  • 49
    No hay una sola palabra Java en un teléfono Android, se compila en código de bytes durante el proceso de empaquetado. La velocidad no es el problema: Google podría proporcionar herramientas que produzcan el código de bytes correcto a partir de un código Python (como para Jython). Por cierto, Dalvik no es la máquina virtual de Java, por lo que no se trata de Java VS Python.
    e-satis
    2 de nov. De 2008 a las 18:20
  • 8
    El código de bytes de JAVA todavía necesita ser procesado por una JVM, y el lenguaje de Java requiere un recolector de basura de todos modos. La velocidad real solo puede provenir de C ++.
    LtWorf
    29/04/14 a las 11:40
  • 20
    @Touzen 2 años más tarde, estamos ejecutando procesadores Intel Atom o procesadores octa-core ahora. ;) 10/04/2015 a las 6:13
  • 3
    Debido a la diferencia en la potencia que pueden consumir, los teléfonos siempre serán un orden de magnitud más lentos que los de escritorio. Sin embargo, no renuncie a Python para el dispositivo móvil, porque normalmente solo una fracción del código es responsable del trabajo intensivo del procesador, y esta fracción se puede optimizar reescribiéndola en otro idioma. 5 de diciembre de 2015 a las 6:05
  • 3
    Por cierto, Google empuja a Kotlin en estos días, que es un lenguaje bastante desconocido para la mayoría de los usuarios, está claro que es posible admitir otros lenguajes además de Java (soy un desarrollador de Java y un fan de Python). Así que creo que la respuesta es más política que práctica.
    Alex
    11/07/18 a las 12:55
83

Compilación cruzada e Ignifuga

Mi blog tiene instrucciones y un parche para la compilación cruzada de Python 2.7.2 para Android.

También he abierto Ignifuga , mi motor de juegos 2D. Está basado en Python / SDL y se compila de forma cruzada para Android. Incluso si no lo usa para juegos, puede obtener ideas útiles del código o la utilidad de construcción (llamado Schafer , después de Tim ... ya sabe quién).

2
  • 5
    Impresionante. +1 para esto. No aceptado porque no es posible escribir nada para el público con esto.
    e-satis
    13/10/11 a las 14:14
  • 2
    Si quiere decir que no puede hacer aplicaciones gráficas con él, definitivamente puede, por supuesto, se necesita más trabajo. De hecho, uso este puerto combinado con SDL 1.3, no es trivial pasar del intérprete de Python a una aplicación interactiva, pero se puede hacer.
    gabomdq
    14/10/11 a las 2:38
82

Capa de secuencias de comandos para Android

SL4A hace lo que quiere. Puede instalarlo fácilmente directamente en su dispositivo desde su sitio y no necesita root.

Es compatible con una variedad de idiomas. Python es el más maduro. De forma predeterminada, usa Python 2.6, pero hay un puerto 3.2 que puede usar en su lugar. He usado ese puerto para todo tipo de cosas en un Galaxy S2 y funcionó bien.

API

SL4A proporciona un puerto de su androidbiblioteca para cada idioma admitido. La biblioteca proporciona una interfaz para la API de Android subyacente a través de un solo Androidobjeto.

from android import Android

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

Cada idioma tiene prácticamente la misma API. Incluso puede utilizar la API de JavaScript dentro de las vistas web.

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

Interfaces de usuario

Para las interfaces de usuario, tiene tres opciones:

  • Puede utilizar fácilmente los menús y diálogos nativos genéricos a través de la API. Esto es bueno para los diálogos de confirmación y otras entradas básicas del usuario.
  • También puede abrir una vista web desde dentro de un script de Python y luego usar HTML5 para la interfaz de usuario. Cuando usa vistas web de Python, puede pasar mensajes de un lado a otro, entre la vista web y el proceso de Python que lo generó. La interfaz de usuario no será nativa, pero sigue siendo una buena opción.
  • Existe cierto soporte para las interfaces de usuario nativas de Android, pero no estoy seguro de qué tan bien funciona; Simplemente no lo he usado nunca.

Puede mezclar opciones, por lo que puede tener una vista web para la interfaz principal y aún usar diálogos nativos.

QPython

Hay un proyecto de terceros llamado QPython . Se basa en SL4A y agrega algunas otras cosas útiles.

QPython le brinda una interfaz de usuario más agradable para administrar su instalación e incluye un pequeño editor de código de pantalla táctil, un shell de Python y un shell de PIP para la administración de paquetes. También tienen un puerto Python 3. Ambas versiones están disponibles en Play Store de forma gratuita. QPython también incluye bibliotecas de varios proyectos de Python en Android, incluido Kivy, por lo que no es solo SL4A.

Tenga en cuenta que QPython todavía desarrolla su bifurcación de SL4A (aunque, para ser honesto, no mucho). El proyecto principal SL4A en sí está prácticamente muerto.

Enlaces útiles

2
  • 2
    ¿Puedes usar alguno de esos para ejecutar un script de Python desde la terminal o tasker? No puedo encontrar una manera :(
    Pitto
    26/08/15 a las 11:27
  • 2
    Puede iniciar un script SL4A desde Tasker. Hay algunos ejemplos en esta página que tienen fragmentos de Python lanzados desde Tasker. Sin embargo, es una pregunta completamente diferente. 1 de septiembre de 2015 a las 19:05
58

Termux

Puede utilizar la aplicación Termux , que proporciona un entorno POSIX para Android, para instalar Python.

Tenga en cuenta que apt install pythoninstalará Python3 en Termux. Para Python2, necesita usar apt install python2.

1
  • 8
    +1 para Termux. Entorno absolutamente maravilloso para trabajar. Gran selección de paquetes en los repositorios, prácticos atajos de botones de volumen. Es lo más parecido a Debian en un teléfono que he encontrado.
    James
    29 de julio de 2018 a las 3:57
54

Decepcionado

Quería agregar a lo que @JohnMudd ha escrito sobre Kivy. Han pasado años desde la situación que describió, y Kivy ha evolucionado sustancialmente.

El mayor punto de venta de Kivy, en mi opinión, es su compatibilidad multiplataforma. Puede codificar y probar todo utilizando cualquier entorno de escritorio (Windows / * nix, etc.), luego empaquetar su aplicación para una variedad de plataformas diferentes, incluidas Android, iOS, MacOS y Windows (aunque las aplicaciones a menudo carecen de la apariencia nativa).

Con el propio lenguaje KV de Kivy , puede codificar y construir la interfaz GUI fácilmente (es como Java XML, pero en lugar de TextView, etc., KV tiene la suya propia ui.widgetspara una traducción similar), que en mi opinión es bastante fácil de adoptar.

Actualmente, Buildozer y python-for-android son las herramientas más recomendadas para crear y empaquetar sus aplicaciones. Los he probado ambos y puedo decir con firmeza que hacen que la creación de aplicaciones de Android con Python sea muy sencilla. Sus guías también están bien documentados.

iOS es otro gran punto de venta de Kivy. Puede usar la misma base de código con pocos cambios necesarios a través de las herramientas kivy-ios Homebrew, aunque se requiere Xcode para la compilación, antes de ejecutarlo en sus dispositivos (AFAIK, el simulador de iOS en Xcode actualmente no funciona para la compilación de arquitectura x86) . También hay algunos problemas de dependencia que deben compilarse manualmente y manipularse en Xcode para tener una compilación exitosa, pero no serían demasiado difíciles de resolver y las personas en Kivy Google Group también son realmente útiles.

Con todo lo dicho, los usuarios con un buen conocimiento de Python no deberían tener problemas para aprender lo básico rápidamente.

Si está utilizando Kivy para proyectos más serios, es posible que los módulos existentes no sean satisfactorios. Sin embargo, existen algunas soluciones viables. Con pyjnius (trabajo en progreso) para Android y pyobjus , los usuarios ahora pueden acceder a las clases Java / Objective-C para controlar algunas de las API nativas.

0
42

No por el momento y tendrías suerte de que Jython funcione pronto. Si está planeando comenzar su desarrollo ahora, sería mejor que se quedara con Java por ahora.

0
42

Con SL4A (que ya se ha mencionado por sí mismo en otras respuestas) puede ejecutar una instancia web2py en toda regla (otros marcos web de Python también son candidatos probables). SL4A no le permite hacer componentes de interfaz de usuario nativos (botones, barras de desplazamiento y similares), pero admite WebViews . Un WebView no es más que un navegador web rayado que apunta a una dirección fija. Creo que la aplicación nativa de Gmail usa WebView en lugar de seguir la ruta habitual de los widgets.

Esta ruta tendría algunas características interesantes:

  • En el caso de la mayoría de los marcos web de Python, podría desarrollar y probar sin usar un dispositivo Android o un emulador de Android.
  • Cualquier código Python que termine escribiendo para el teléfono también podría colocarse en un servidor web público con muy poca (si alguna) modificación.
  • Podrías aprovechar todas las cosas locas de la web: consultas, HTML5, CSS3, etc.
1
  • 3
    Cherrypy funciona bien, con soporte ws4py websocket. La botella también está bien en SL4A. 13 feb 2013 a las 1:28
37

QPython

Yo uso la aplicación QPython . Es gratis e incluye un editor de código, un intérprete interactivo y un administrador de paquetes, lo que le permite crear y ejecutar programas Python directamente en su dispositivo.

1
  • 3
    ¡Ahora qpython agregó soporte para Django! ¡Eso es todo lo que necesito! ¡Increíble!
    swdev
    7/10/2013 a las 14:36
30

Desde el sitio de Python para 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.

3
  • 1
    @ e-satis: Gracias por tu comentario. No veo qué respuesta estoy duplicando. Solo puedo suponer que piensas que PFA es lo mismo que Kivy. Aunque está alojado en el proyecto Kivy, ni siquiera tiene que usar Kivy para usar PFA.
    gdw2
    9/01/12 a las 22:46
  • Verifique la respuesta eliminada de @ tito en el punto inferior de PFA. Además, hay poco interés en ejecutar PFA sin kivy, ya que es el único conjunto de herramientas que tiene.
    e-satis
    10 de enero de 2012 a las 0:55
  • No es porque kivy sea actualmente el único kit de herramientas disponible (algunas personas están trabajando para integrar a otras) sino que es un duplicado. Por favor, considere las otras opciones como están y no las combine todas en una sola publicación: |
    tito
    16/03/12 a las 14:34
30

Aquí hay algunas herramientas enumeradas en el sitio web oficial de Python


Hay una aplicación llamada QPython3 en playstore que se puede usar tanto para editar como para ejecutar el script de Python.

Enlace de Play Store


Otra aplicación llamada Termux en la que puede instalar Python usando el comando

pkg install python

Enlace de Play Store


Si desea desarrollar aplicaciones, existe 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.


También puede verificar PySide para Android , que en realidad son enlaces de Python para Qt 4.


Existe una plataforma llamada PyMob donde las aplicaciones se pueden escribir exclusivamente en Python y el flujo de herramientas del compilador (PyMob) las convierte en códigos fuente nativos para varias plataformas.


También verifique python-for-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.


Pruebe Chaquopy A Python SDK para 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.

1
  • 2
    usando Termux puede instalar python 2 y $ apt install python2
    M.Hefny
    16 de julio de 2017 a las 1:53
24

Chaquopy

Chaquopy es un complemento para el sistema de compilación basado en Gradle de Android Studio. Se centra en una estrecha integración con las herramientas de desarrollo estándar de Android.

  • Proporciona API completas para llamar a Java desde Python o Python desde Java , lo que permite al desarrollador utilizar el lenguaje que sea mejor para cada componente de su aplicación.

  • Puede descargar automáticamente paquetes de PyPI y compilarlos en una aplicación, incluidos paquetes nativos seleccionados como NumPy.

  • Permite el acceso completo a todas las API de Android desde Python, incluido el kit de herramientas de la interfaz de usuario nativa ( ejemplo, actividad de Python puro ).

Este es un producto comercial, pero es gratuito para uso de código abierto y siempre lo seguirá siendo.

(Soy el creador de este producto).

1
  • 1
    Solo quiero agregar que me impresionó mucho esta opción. Funciona muy bien. El precio no es terrible (gratis para aplicaciones de código abierto, pago único de $ 50 para aplicaciones de código cerrado). He decidido no ejecutar Python en Android porque aumenta MUCHO el tamaño de la aplicación, pero si eso no es un problema, realmente recomiendo esta opción.
    JAnton
    9 de julio a las 1:20
22

Otro intento más: https://code.google.com/p/android-python27/

Este incrusta directamente el intérprete de Python en la aplicación apk.

0
18

Puede ejecutar su código Python usando sl4a . sl4a admite Python, Perl , JRuby , Lua , BeanShell, JavaScript, Tcl y script de shell.

Puede aprender ejemplos de sl4a Python .

0
14

Puede utilizar QPython :

Tiene una consola Python, un editor, así como una administración / instaladores de paquetes

http://qpython.com/

Es un proyecto de código abierto con implementaciones de Python 2 y Python 3. Puede descargar la fuente y los archivos .apk de Android directamente desde github.

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

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

13

Otra opción si está buscando 3.4.2 o más reciente (3.9.6 al momento de escribir este artículo) es este archivo en GitHub.

Python3-Android 3.4.2 o Python3-Android 3.9.6

Creo que el archivo original es compatible con Python 3.4.2, la última rama GRRedwings es compatible con 3.9.6 y la versión 22b del NDK. Las ramas más antiguas admiten otras versiones, pero no son tan fáciles de compilar con Docker.

La versión anterior simplemente clona el archivo, ejecuta make y obtiene el .so o el .a

Las versiones más recientes siguen a ReadMe, pero usa Docker para compilaciones consistentes.

Actualmente lo uso para ejecutar Python sin procesar en dispositivos Android. Con un par de modificaciones en los archivos de compilación, también puede hacer x86 y armeabi de 64 bits

12

No vi esto publicado aquí, pero puede hacerlo con Pyside y Qt ahora que Qt funciona en Android gracias a Necessitas.

Parece bastante torpe en este momento, pero podría ser una ruta viable eventualmente ...

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

11

Eche un vistazo a BeeWare . Ha crecido significativamente. Se le otorga la Beca de Educación PSF (Python Software Foundation).

El objetivo de Beeware es poder crear aplicaciones nativas con Python para todos los sistemas operativos compatibles, incluido Android.

Sitio web oficial: Beeware

Repositorio de Github: https://github.com/beeware

1
  • ¿Cuál es la diferencia toi Kivy? Es estable y portátil basado en Python Gui 16 feb.20 a las 18:47
9

Una opción más parece ser pyqtdeploy, que citando los documentos es:

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).

De acuerdo con la implementación de la aplicación PyQt5 en Android a través de pyqtdeploy y Qt5 , se desarrolla activamente, aunque es difícil encontrar ejemplos de aplicaciones de Android que funcionen o un tutorial sobre cómo compilar todas las bibliotecas necesarias en Android. ¡Es un proyecto interesante a tener en cuenta!

5

Echa un vistazo a enaml-native, que toma el concepto react-native y lo aplica a Python.

Permite a los usuarios crear aplicaciones con widgets nativos de Android y proporciona API para usar bibliotecas de Android y Java de Python.

También se integra con android-studio y comparte algunas de las características de desarrollo agradables de react, como la recarga de código y la depuración remota.