¿Hay alguna manera de ejecutar Python en Android?

2092

Estamos trabajando en una versión S60 y esta plataforma tiene una buena 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?

e-satis
fuente

Respuestas:

1061

Una forma es usar Kivy :

Biblioteca Python de código abierto para el desarrollo rápido de aplicaciones que utilizan interfaces de usuario innovadoras, como aplicaciones multitáctiles.

Kivy se ejecuta en Linux, Windows, OS X, Android e iOS. Puede ejecutar el mismo código [python] en todas las plataformas compatibles.

Aplicación Kivy Showcase

JohnMudd
fuente
63
Si usa Kivy, aquí hay una herramienta para ayudarlo a empaquetar su proyecto en un APK: github.com/kivy/python-for-android
gdw2
17
Estuve jugando con Kivy la semana pasada intentando escribir un juego. Sus principales desarrolladores fueron muy rápidos para responder preguntas sobre IRC, sin embargo, si ha programado una GUI antes de que Kivy lo haga 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 crearon ( tenga en cuenta que estos comparten el nombre con la propiedad de Python, pero no son lo mismo)
Trey Stout
77
@Trey: ¿Qué pasa con las cosas no relacionadas con la GUI? ¿Hay 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
77
¡Y ahora también hay soporte para iOS!
rubik
16
Ahora, casi un año después, ¿es mejor el soporte? ¿Ha habido alguna mejora notable?
TankorSmash
347

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 algunos tenedores pueden estarlo.

Avaro de calor
fuente
70
Es cierto, pero tienen que tener ASE instalado, no es una solución que le permita escribir una aplicación de Android en python sin nada ya instalado (el usuario normal será todo "¿qué es esto de ASE?)
Stuart Axon
20
Además, ASE es un entorno restringido; no puede escribir aplicaciones de Android completas incluso si ASE está preinstalado. Ver stackoverflow.com/questions/2076381
Sridhar Ratnakumar el
10
Creo que fue renombrado a SL4A.
Vanuan
99
Puede escribir aplicaciones, empaquetarlas e incluso venderlas en Play Store si lo desea, con SL4A hoy en día. Ha llegado bien desde que se publicaron los comentarios anteriores. Si desea Python en Android, PY4A, que se ejecuta en SL4A, es probablemente la mejor opción.
Carl Smith
2
Confirmo que SL4A ahora permite escribir paquetes de aplicaciones listos para usar, probé con Perl, funciona
ubugnu
216

¡Si! : 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)
desmontado
fuente
46
s / YES / meh. tal vez / ... es extremadamente limitado. ¿Algo gráfico o multitáctil? un gran NO
gcb
2
@gcb no puede usar el conjunto normal de widgets de Android, pero puede usar "vistas web" (que es lo que usa la aplicación nativa de Gmail, por ejemplo).
gdw2
28
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
12
@ 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.
Veselin Romić
88

Pygame Subset para Android

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

... un puerto de un subconjunto de la funcionalidad Pygame para la plataforma Android. El objetivo del proyecto es permitir la creación de juegos específicos de Android y facilitar la transferencia de juegos desde plataformas similares a PC a Android.

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

muriloq
fuente
44
Varios aspectos se rompieron en mi Droid X (botones o pantalla táctil, no lo recuerdo), así que no llegué muy lejos con esta ruta.
gdw2
78

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 compila de forma cruzada para Android. Incluso si no lo usa para juegos, puede obtener ideas útiles del código o la utilidad del generador (llamado Schafer , en honor a Tim ... ya sabe quién).

gabomdq
fuente
44
Impresionante. +1 por esto. No se acepta porque no puedes escribir nada para el público con esto.
e-satis
1
Si quiere decir que no puede hacer aplicaciones gráficas con él, definitivamente puede, por supuesto, se necesita más trabajo. De hecho, utilizo 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
77

Capa de secuencias de comandos para Android

SL4A hace lo que quieres. 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. Por defecto, 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 compatible. 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 más o menos la misma API. Incluso puede usar 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 usar fácilmente los diálogos y menús genéricos nativos 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 un script de Python, 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, para que pueda tener una vista web de la interfaz principal, y aún así usar diálogos nativos.

QPython

Hay un proyecto de un tercero 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 agrupa bibliotecas de un montón de Python en proyectos de Android, incluido Kivy, por lo que no es solo SL4A.

Tenga en cuenta que QPython aún desarrolla su fork de SL4A (aunque, para ser sincero, no hay mucho). El principal proyecto SL4A en sí está prácticamente muerto.

Enlaces útiles

Carl Smith
fuente
1
¿Puedes usar alguno de esos para ejecutar el script de Python desde la terminal o tasker? No puedo encontrar una manera :(
Pitto
1
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 realmente una pregunta completamente diferente.
Carl Smith
77

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 incluyen archivos XML para configurar la pantalla, de forma similar al HTML. Los objetos Java integrados 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 para 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 buena cantidad 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 por un tiempo aún en dispositivos móviles.

laca
fuente
48
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 byte correcto a partir de un código de 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 el
66
El código de bytes JAVA aún debe ser procesado por una JVM, y el lenguaje Java requiere un recolector de basura de todos modos. La velocidad real solo puede provenir de C ++.
LtWorf
19
@Touzen 2 años más tarde, estamos ejecutando procesadores Intel Atom o procesadores octa-core ahora. ;)
Rohan Kandwal
2
Debido a la diferencia en la potencia que pueden extraer, los teléfonos siempre serán un orden de magnitud más lentos que los equipos de escritorio. Sin embargo, no te rindas en 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.
Evgeni Sergeev
2
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 idiomas que no sean Java (soy un desarrollador de Java y un fanático de Python). Así que creo que la respuesta es más bien política que práctica.
Alex
49

Kivy

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 el suyo 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 compilar y empaquetar sus aplicaciones. Los probé a ambos y puedo decir con firmeza que facilitan la creación de aplicaciones de Android con Python. Sus guías también están bien documentadas.

iOS es otro gran punto de venta de Kivy. Puede usar la misma base de código con algunos cambios necesarios a través de las herramientas Homebrew de kivy-ios , aunque se requiere Xcode para la compilación, antes de ejecutarse 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 se deben compilar y manipular manualmente 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.

Habiendo dicho todo esto, los usuarios con buenos conocimientos de Python no deberían tener problemas para aprender lo básico rápidamente.

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

Anzel
fuente
Acabo de descargar Kivy de su sitio. Muestra soporte para Python 3.4 de 32 y 64 bits, y una demostración del funcionamiento de entrada táctil.
codeReview
1
@codeReview, he estado usando Kivy solo con Python2 y no tengo experiencia con Python3, ¿todo funciona sin problemas?
Anzel
Te lo haré saber con suerte pronto. Pero no tengo experiencia con Python fuera de los archivos .py del shell de comandos de CPython 3.4 para resolver rápidamente problemas de cálculo o algoritmos. Esta será mi primera aplicación con una GUI. Necesitaría leer más documentación, comprender el lenguaje Kivy y seguir cuidadosamente los pasos de instalación, así sé cómo instalar Kivi en mi Python IDE de elección y empaquetar el APK para enviarlo a Android. Es un proceso de muchos pasos, por lo que puede que no sea increíblemente pronto cuando pueda decirlo.
codeReview
1
@codeReview, buena suerte para tu viaje. Si esta es su primera aplicación, le recomiendo utilizar .kv como archivo de diseño. Es como un archivo yaml o simplemente un árbol para definir los widgets de diseño. Si su aplicación es multi-pantalla / diseños, úsela ScreenManagerya que esto le ahorrará toneladas de tiempo. También un consejo es leer su lista de correo, un grupo de personas con conocimientos allí dispuestos a ayudarlo.
Anzel
1
@codeReview, también, en lugar de aprender de la aplicación de demostración de Kivy, puede obtener más información buscando algunas aplicaciones kivy existentes y ver cómo las personas manejan los "widgets" y las devoluciones de llamadas en un escenario del mundo real. Kivy no es difícil de aprender en absoluto, lo diré mucho más fácil en términos de curva de aprendizaje que decir, en Java + Android o
Objective
40

Termux

Puede usar 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, necesitas usar apt install python2.

Adrian Stanculescu
fuente
55
+1 para Termux. Entorno absolutamente maravilloso para trabajar. Gran selección de paquetes en los repositorios, atajos de botones de volumen útiles. Es lo más parecido a Debian en un teléfono que he encontrado.
James
39

No en este momento y sería afortunado de hacer que Jython trabaje pronto. Si está planeando comenzar su desarrollo ahora, sería mejor quedarse con Java por ahora.

Ilya Kochetov
fuente
39

Usando SL4A (que ya ha sido mencionado por sí mismo en otras respuestas) puede ejecutar una instancia web2py completa (otros marcos web de Python también son candidatos posibles). SL4A no le permite hacer componentes nativos de la interfaz de usuario (botones, barras de desplazamiento y similares), pero admite WebViews . Básicamente, un WebView no es más que un navegador web reducido a una dirección fija. Creo que la aplicación nativa de Gmail usa un WebView en lugar de seguir la ruta de widgets normal.

Esta ruta tendría algunas características interesantes:

  • En el caso de la mayoría de los frameworks 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 se puede poner en un servidor web público con muy poca (si es que hay alguna) modificación.
  • Podrías aprovechar todas las cosas locas de la web: consulta, HTML5, CSS3, etc.
gdw2
fuente
2
Cherrypy funciona bien, con soporte websocket ws4py. La botella también está bien en SL4A.
Carl Smith
33

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.

kyle k
fuente
2
Ahora qpython agregó soporte Django! Eso es todo lo que necesito! ¡Asombroso!
swdev
27

Desde el sitio de Python para Android :

Python para Android es un proyecto para crear su propia distribución de Python, incluidos los módulos que desea, y crear un apk que incluya python, libs y su aplicación.

gdw2
fuente
1
@ e-satis: Gracias por tu comentario. No veo qué respuesta estoy duplicando. Solo puedo adivinar 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
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 kit de herramientas que tienes.
e-satis
No es porque kivy sea actualmente el único kit de herramientas disponible (algunas personas están trabajando para integrar a otros) sino que es un duplicado. Considere las otras opciones como tal, y no combine todas en una sola publicación: |
tito
21

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 usar el lenguaje que sea mejor para cada componente de su aplicación.

  • Puede descargar automáticamente paquetes 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 (por ejemplo, actividad de Python puro ).

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

(Soy el creador de este producto).

mhsmith
fuente
20

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


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

Enlace de Play Store


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

pkg install python

Enlace de Play Store


Si desea desarrollar aplicaciones, hay 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 consultar PySide para Android , que en realidad es enlaces de Python para Qt 4.


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


Compruebe también 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.


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

pz64_
fuente
2
usando Termux puedes instalar python 2 también $ apt install python2
M.Hefny
16

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

Puede aprender ejemplos de Python sl4a .

Hitul
fuente
12

Otra opción si está buscando 3.4.2 o 3.5.1 es este archivo en GitHub.

Python3-Android 3.4.2 o Python3-Android 3.5.1

Actualmente es compatible con Python 3.4.2 o 3.5.1 y la versión 10d del NDK. También puede soportar 3.3 y 9c, 11c y 12

Es bueno que simplemente lo descargue, ejecute make y obtenga el .so o el .a

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

Enviado GR
fuente
9

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

Una herramienta que, junto con otras herramientas proporcionadas con Qt, permite la implementación de aplicaciones PyQt4 y PyQt5 escritas con Python v2.7 o Python v3.3 o posterior. Admite la implementación en plataformas de escritorio (Linux, Windows y OS X) y en plataformas móviles (iOS y Android).

De acuerdo con la aplicación Deploying 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 tutoriales sobre cómo compilar todas las bibliotecas necesarias para Android. ¡Sin embargo, es un proyecto interesante a tener en cuenta!

Andrzej Pronobis
fuente
6

Echa un vistazo a BeeWare . En el momento de responder a esta pregunta todavía está en desarrollo temprano. Su objetivo es poder crear aplicaciones nativas con Python para todos los sistemas operativos compatibles, incluido Android.

DrawT
fuente
¿Cuál es la diferencia para Kivy? Es una Python portátil estable basada en Gui
Carsten Thielepape
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 desde Python.

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

frmdstryr
fuente