C'è un modo per eseguire Python su Android?


2092

Stiamo lavorando su una versione S60 e questa piattaforma ha una bella API Python ..

Tuttavia, non esiste nulla di ufficiale su Python su Android, ma poiché esiste Jython , esiste un modo per far lavorare insieme il serpente e il robot ??

Risposte:


1061

Un modo è usare Kivy :

Libreria Python open source per lo sviluppo rapido di applicazioni che fanno uso di interfacce utente innovative, come le app multi-touch.

Kivy funziona su Linux, Windows, OS X, Android e iOS. Puoi eseguire lo stesso codice [python] su tutte le piattaforme supportate.

Kivy Showcase app


63
Se usi Kivy, ecco uno strumento per aiutarti a impacchettare il tuo progetto in un APK: github.com/kivy/python-for-android
gdw2

17
Ho giocato con Kivy la scorsa settimana nel tentativo di scrivere una partita. I loro principali sviluppatori sono stati molto veloci a rispondere alle domande su IRC, tuttavia se hai programmato una GUI prima che Kivy ti faccia dire WTF abbastanza. Alcuni esempi di cose non documentate che erano strane per me: tutti i widget ottengono ogni evento on_touch_down anche se l'evento si è verificato al di fuori della loro area, nessun widget ha un metodo draw (), quasi tutto accade tramite un modello di osservatore personalizzato su Proprietà personalizzate che hanno creato ( nota che condividono il nome con la proprietà di Python, ma non sono gli stessi)
Trey Stout

7
@Trey: che dire delle cose non relative alla GUI? Ci sono delle limitazioni riguardo all'uso dei moduli di Python? Che dire dell'accesso alle funzionalità specifiche di Android, come la capacità di leggere messaggi, aggiungere notifiche, lavorare in background, fare una foto, leggere l'elenco dei contatti, determinare la posizione GPS ecc.?
Tadeck,

7
E ora c'è anche il supporto iOS!
rubik

16
Ora, quasi un anno intero dopo, il supporto è migliore? Qui sono stati apportati notevoli miglioramenti?
TankorSmash,

347

Esiste anche il nuovo progetto Android Scripting Environment (ASE / SL4A). Sembra fantastico e ha una certa integrazione con i componenti Android nativi.

Nota: non più in "sviluppo attivo", ma alcune forcelle potrebbero essere.


70
È vero, ma devono avere ASE installato, non è una soluzione che ti consente di scrivere un'app Android in Python senza nulla di già installato (l'utente normale sarà tutto "wtf è questa cosa ASE?)
Stuart Axon

20
Inoltre, ASE è un ambiente limitato; non puoi scrivere app Android complete anche se ASE è preinstallato. Vedere stackoverflow.com/questions/2076381
Sridhar Ratnakumar

10
Penso che sia stato rinominato in SL4A.
Vanuan,

9
Puoi scrivere app, impacchettarle e persino venderle sul Play Store, se lo desideri, con SL4A oggi. È arrivato bene da quando sono stati pubblicati i commenti sopra. Se vuoi Python su Android, allora PY4A, che funziona su SL4A, è probabilmente la scelta migliore.
Carl Smith

2
Confermo, SL4A ora permette di scrivere pacchetti di applicazioni pronti all'uso, ho provato con perl che funziona
ubugnu

216

Sì! : Ambiente di scripting Android

Un esempio tramite Matt Cutts tramite SL4A - "ecco uno scanner di codici a barre scritto in sei righe di codice 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
s / YES / meh. forse / ... è estremamente limitato. qualcosa di grafico o multi touch? un grande NO.
gcb,

2
@gcb non puoi usare il normale set di widget Android, ma puoi usare "webview" (che è quello che usa l'applicazione gmail nativa, per esempio).
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, sicuramente l'app nativa di Gmail utilizza WebView solo per analizzare le e-mail, non per l'interfaccia utente effettiva. Ciò rende il confronto un po 'assurdo.
Veselin Romić,

88

Sottoinsieme Pygame per Android

Pygame è un motore di gioco 2D per Python (su desktop) popolare tra i nuovi programmatori. Il sottoinsieme Pygame per Android si definisce come ...

... una porta di un sottoinsieme di funzionalità Pygame per la piattaforma Android. L'obiettivo del progetto è consentire la creazione di giochi specifici per Android e facilitare il porting di giochi da piattaforme simili a PC su Android.

Gli esempi includono un gioco completo impacchettato come APK, che è piuttosto interessante.


4
Diversi aspetti sono stati interrotti sul mio Droid X (pulsanti o touchscreen, non ricordo), quindi non sono andato molto lontano con questo percorso.
gdw2,

78

Raccolta incrociata e Ignifuga

Il mio blog contiene istruzioni e una patch per la compilazione incrociata di Python 2.7.2 per Android.

Ho anche aperto Ignifuga , il mio motore di gioco 2D. È basato su Python / SDL e si compila per Android. Anche se non lo usi per i giochi, potresti ottenere idee utili dall'utilità del codice o del builder (di nome Schafer , dopo Tim ... sai chi).


4
Degno di nota. +1 per questo. Non accettato perché non è possibile scrivere nulla per il pubblico con questo.
e-soddisfa il

1
Se vuoi dire che non puoi fare app grafiche con esso, sicuramente puoi sicuramente più lavoro. In realtà utilizzo questa porta in combinazione con SDL 1.3, non è banale passare dall'interprete Python a un'app interattiva, ma può essere fatto.
gabomdq,

77

Scripting Layer per Android

SL4A fa quello che vuoi. Puoi installarlo facilmente direttamente sul tuo dispositivo dal loro sito e non hai bisogno di root.

Supporta una vasta gamma di lingue. Python è il più maturo. Per impostazione predefinita, utilizza Python 2.6, ma è invece possibile utilizzare una porta 3.2 . Ho usato quella porta per tutti i tipi di cose su un Galaxy S2 e ha funzionato bene.

API

SL4A fornisce una porta della loro androidlibreria per ogni lingua supportata. La libreria fornisce un'interfaccia all'API Android sottostante tramite un singolo Androidoggetto.

from android import Android

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

Ogni lingua ha praticamente la stessa API. Puoi persino utilizzare l'API JavaScript all'interno delle visualizzazioni Web.

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

Interfacce utente

Per le interfacce utente, hai tre opzioni:

  • È possibile utilizzare facilmente i dialoghi e i menu nativi generici tramite l'API. Questo è utile per i dialoghi di conferma e altri input utente di base.
  • Puoi anche aprire una visualizzazione Web dall'interno di uno script Python, quindi utilizzare HTML5 per l'interfaccia utente. Quando si utilizzano le visualizzazioni Web da Python, è possibile passare i messaggi avanti e indietro, tra la visualizzazione Web e il processo Python che l'ha generato. L'interfaccia utente non sarà nativa, ma è comunque una buona opzione.
  • C'è un po 'di supporto per le interfacce utente native di Android, ma non sono sicuro di come funzioni; Non l'ho mai usato.

Puoi mescolare le opzioni, in modo da avere una visualizzazione web per l'interfaccia principale e continuare a usare dialoghi nativi.

QPython

Esiste un progetto di terze parti chiamato QPython . Si basa su SL4A e aggiunge alcune altre cose utili.

QPython offre un'interfaccia utente migliore per gestire l'installazione e include un piccolo editor di codice touchscreen, una shell Python e una shell PIP per la gestione dei pacchetti. Hanno anche una porta Python 3. Entrambe le versioni sono disponibili nel Play Store, gratuitamente. QPython raggruppa anche le librerie di un gruppo di Python su progetti Android, incluso Kivy, quindi non è solo SL4A.

Nota che QPython sviluppa ancora il suo fork di SL4A (anche se non molto per essere onesti). Il principale progetto SL4A stesso è praticamente morto.

link utili


1
Puoi usarne uno per eseguire script Python dal terminale o dal tasker? Non riesco a trovare un modo :(
Pitto

1
È possibile avviare uno script SL4A da Tasker. Ci sono alcuni esempi in questa pagina che hanno frammenti di Python lanciati da Tasker. È davvero una domanda completamente diversa.
Carl Smith,

77

Come amante di Python e programmatore Android, sono triste nel dire che questo non è un buon modo di procedere. Ci sono due problemi:

Un problema è che c'è molto di più di un semplice linguaggio di programmazione negli strumenti di sviluppo Android. Gran parte della grafica Android coinvolge file XML per configurare il display, in modo simile all'HTML. Gli oggetti Java integrati sono integrati con questo layout XML ed è molto più semplice che scrivere il codice per passare dalla logica alla bitmap.

L'altro problema è che il G1 (e probabilmente altri dispositivi Android per il prossimo futuro) non sono così veloci. Processori a 200 MHz e RAM sono molto limitati. Anche in Java, devi fare una discreta quantità di riscrittura per evitare di creare più oggetti se vuoi rendere la tua app perfettamente fluida. Python sarà troppo lento per un po 'ancora sui dispositivi mobili.


48
Non esiste una sola parola java su un telefono Android, viene compilata in codice byte durante il processo di impacchettamento. La velocità non è il problema: Google potrebbe fornire strumenti che producono il giusto codice byte da un codice Python (come per Jython). A proposito, Dalvik non è la VM Java quindi non si tratta di Java VS Python.
e-satis

6
Il bytecode JAVA deve ancora essere elaborato da una JVM e il linguaggio Java richiede comunque un garbage collector. La velocità effettiva potrebbe provenire solo da C ++.
Ten .orf

19
@Touzen altri 2 anni dopo, ora eseguiamo il processore Intel Atom o i processori octa-core. ;)
Rohan Kandwal il

2
A causa della differenza di potenza che sono in grado di assorbire, i telefoni saranno sempre di un ordine di grandezza più lenti rispetto ai desktop. Tuttavia, non rinunciare a Python per il dispositivo mobile, poiché in genere solo una parte del codice è responsabile del lavoro ad alta intensità di processore e questa frazione può essere ottimizzata riscrivendola in un'altra lingua.
Evgeni Sergeev,

2
Dal modo in cui Google spinge Kotlin in questi giorni - che è una lingua piuttosto sconosciuta per la maggior parte degli utenti - è chiaro che è possibile supportare altre lingue oltre a Java (sono un sviluppatore Java e un fan di Python). Quindi penso che la risposta sia piuttosto politica che pratica.
Alex,

49

Kivy

Volevo aggiungere ciò che @JohnMudd ha scritto su Kivy. Sono passati anni dalla situazione che ha descritto e Kivy si è evoluto sostanzialmente.

Il più grande punto di forza di Kivy, secondo me, è la sua compatibilità multipiattaforma. Puoi codificare e testare tutto utilizzando qualsiasi ambiente desktop (Windows / * nix ecc.), Quindi impacchettare la tua app per una gamma di piattaforme diverse, tra cui Android, iOS, MacOS e Windows (anche se le app spesso non hanno l'aspetto nativo).

Con il linguaggio KV di Kivy , puoi codificare e costruire facilmente l'interfaccia della GUI (è proprio come Java XML, ma piuttosto che TextView ecc., KV ha il suo ui.widgetsper una traduzione simile), che secondo me è abbastanza facile da adottare.

Attualmente Buildozer e python-for-android sono gli strumenti più consigliati per creare e impacchettare le tue app. Li ho provati entrambi e posso affermare con fermezza che rendono la creazione di app Android con Python un gioco da ragazzi. Anche le loro guide sono ben documentate.

iOS è un altro grande punto di forza di Kivy. Puoi usare la stessa base di codice con poche modifiche richieste tramite gli strumenti Homebrew di kivy-ios , sebbene Xcode sia richiesto per la build, prima di essere eseguito sui loro dispositivi (AFAIK il simulatore iOS in Xcode attualmente non funziona per la build di architettura x86) . Ci sono anche alcuni problemi di dipendenza che devono essere compilati manualmente e risolti in Xcode per avere una build di successo, ma non sarebbero troppo difficili da risolvere e anche le persone di Kivy Google Group sono davvero utili.

Detto questo, gli utenti con una buona conoscenza di Python non dovrebbero avere problemi a cogliere rapidamente le basi.

Se stai usando Kivy per progetti più seri, potresti trovare insoddisfacenti i moduli esistenti. Ci sono alcune soluzioni praticabili però. Con (work in progress) pyjnius per Android e pyobjus , gli utenti possono ora accedere alle classi Java / Objective-C per controllare alcune delle API native.


Ho appena scaricato Kivy dal suo sito. Mostra il supporto per Python 3.4 a 32 e 64 bit e una demo di input tattile funzionante.
code Review

1
@codeReview, sto usando Kivy solo con Python2 e non ho esperienza con Python3, tutto funziona senza intoppi?
Anzel,

Ti farò sapere presto, spero. Ma non ho esperienza con Python al di fuori dei file .py della shell di comando di CPython 3.4 per risolvere rapidamente problemi di calcolo o algoritmici. Questa sarà la mia prima app con una GUI. Avrei bisogno di leggere più documentazione, comprendere il linguaggio Kivy e seguire attentamente i passaggi dell'installazione, quindi so come installare Kivi sul mio IDE Python di scelta e impacchettare l'APK per spingere su Android. È un processo in molti passaggi, quindi potrebbe non essere incredibilmente presto quando posso dirlo.
code Review

1
@codeReview, buona fortuna per il tuo viaggio. Se questa è la tua prima app, ti consiglio vivamente di utilizzare .kv come file di layout. È come un file yaml o semplicemente un albero per definire i widget di layout. Se la tua app è multi-schermo / layout, utilizza in ScreenManagerquanto ciò ti farà risparmiare un sacco di tempo. Un consiglio è anche quello di leggere la loro mailing list, un gruppo di persone ben informate disposte ad aiutarti.
Anzel,

1
@codeReview, inoltre, invece di apprendere dall'app demo di Kivy, potresti ottenere maggiori approfondimenti alla ricerca di alcune app kivy esistenti e vedere come le persone gestiscono i "widget" e le richiamate in uno scenario del mondo reale. Kivy non è affatto difficile da imparare, dirò molto più facile in termini di curva di apprendimento che dire, in Java + Android o obiettivo-C + iOS
Anzel,

40

Termux

È possibile utilizzare l' app Termux , che fornisce un ambiente POSIX per Android, per installare Python.

Nota che apt install pythoninstallerà Python3 su Termux. Per Python2, è necessario utilizzare apt install python2.


5
+1 per Termux. Ambiente assolutamente meraviglioso in cui lavorare. Ottima selezione di pacchetti nei repository, comode scorciatoie per i pulsanti del volume. È la cosa più vicina a Debian su un telefono che abbia mai trovato.
James,

39

Al momento no e saresti fortunato a far funzionare presto Jython. Se stai pianificando di iniziare il tuo sviluppo ora, staresti meglio con il solo attenersi a Java per ora.


39

Utilizzando SL4A (che è già stato menzionato da sola in altre risposte), è possibile eseguire una vera e web2py esempio (altri framework Python web sono probabili candidati pure). SL4A non consente di eseguire componenti dell'interfaccia utente nativi (pulsanti, barre di scorrimento e simili), ma supporta WebView . Un WebView non è altro che un browser Web con striping puntato verso un indirizzo fisso. Credo che l'app nativa di Gmail utilizzi un WebView invece di seguire il normale percorso del widget.

Questo percorso avrebbe alcune caratteristiche interessanti:

  • Nel caso della maggior parte dei framework Web Python, potresti effettivamente sviluppare e testare senza utilizzare un dispositivo Android o un emulatore Android.
  • Qualunque sia il codice Python che finisci per scrivere per il telefono potrebbe anche essere messo su un server web pubblico con pochissime (se presenti) modifiche.
  • Potresti approfittare di tutte le cose pazze sul web là fuori: query, HTML5, CSS3, ecc.

2
Cherrypy funziona bene, con supporto per websocket ws4py. Anche la bottiglia va bene su SL4A.
Carl Smith,

33

QPython

Uso l'app QPython . È gratuito e include un editor di codice, un interprete interattivo e un gestore di pacchetti, che consente di creare ed eseguire programmi Python direttamente sul dispositivo.


2
Ora qpython ha aggiunto il supporto Django! Questo è tutto ciò di cui ho bisogno! Sorprendente!
swdev,

27

Dal sito Python per Android :

Python per Android è un progetto per creare la tua distribuzione Python personalizzata includendo i moduli che desideri e creare un apk che include python, libs e la tua applicazione.


1
@ e-satis: grazie per il tuo commento. Non vedo quale risposta sto duplicando. Posso solo immaginare che pensi che PFA sia uguale a Kivy. Sebbene sia ospitato nell'ambito del progetto Kivy, non è nemmeno necessario utilizzare Kivy per utilizzare PFA.
gdw2,

Controlla la risposta eliminata di @ tito nella parte inferiore di PFA. Inoltre, c'è poco interesse nell'esecuzione di PFA senza kivy poiché è l'unico toolkit che hai.
e-satis

Non è perché kivy è attualmente l'unico toolkit disponibile (alcune persone stanno lavorando per intregrare gli altri) di quanto sia un duplicato. Si prega di considerare le altre opzioni così come sono e non unire tutti in un unico post: |
Tito

21

Chaquopy

Chaquopy è un plugin per il sistema di build basato su Gradle di Android Studio. Si concentra sulla stretta integrazione con gli strumenti di sviluppo Android standard.

  • Fornisce API complete per chiamare Java da Python o Python da Java , consentendo allo sviluppatore di utilizzare il linguaggio più adatto a ciascun componente della propria app.

  • Può scaricare automaticamente i pacchetti PyPI e crearli in un'app, inclusi i pacchetti nativi selezionati come NumPy.

  • Consente l'accesso completo a tutte le API Android da Python, incluso il toolkit dell'interfaccia utente nativa ( esempio attività pure-Python ).

Questo è un prodotto commerciale, ma è gratuito per l'uso open source e rimarrà sempre così.

(Sono il creatore di questo prodotto.)



20

Ecco alcuni strumenti elencati nel sito Web ufficiale di Python


C'è un'app chiamata QPython3 nel playstore che può essere usata sia per l'editing che per eseguire script python.

Link al Playstore


Un'altra app chiamata Termux in cui è possibile installare Python usando il comando

pkg install python

Link Playstore


Se vuoi sviluppare app, c'è 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.


Puoi anche controllare PySide per Android , che in realtà è i collegamenti Python per Qt 4.


Esiste una piattaforma chiamata PyMob in cui le app possono essere scritte esclusivamente in Python e il flusso di strumenti del compilatore (PyMob) le converte in codici sorgente nativi per varie piattaforme.


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


Prova Chaquopy A Python SDK per 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.


2
usando Termux puoi installare python 2 e $ apt install python2
M.Hefny



12

Un'altra opzione se stai cercando 3.4.2 o 3.5.1 è questo archivio su GitHub.

Python3-Android 3.4.2 o Python3-Android 3.5.1

Attualmente supporta Python 3.4.2 o 3.5.1 e la versione 10d di NDK. Può anche supportare 3.3 e 9c, 11c e 12

È bello che lo scarichi, esegui make e ottieni il .so o il .a

Attualmente lo uso per eseguire Python raw su dispositivi Android. Con un paio di modifiche ai file di build puoi anche fare x86 e armeabi a 64 bit



9

Un'altra opzione sembra essere pyqtdeploy che cita i documenti è:

uno strumento che, insieme ad altri strumenti forniti con Qt, consente la distribuzione di applicazioni PyQt4 e PyQt5 scritte con Python v2.7 o Python v3.3 o successive. Supporta la distribuzione su piattaforme desktop (Linux, Windows e OS X) e su piattaforme mobili (iOS e Android).

Secondo la distribuzione dell'applicazione PyQt5 su Android tramite pyqtdeploy e Qt5 , viene sviluppato attivamente, sebbene sia difficile trovare esempi di app Android funzionanti o tutorial su come compilare tutte le librerie richieste su Android. È un progetto interessante da tenere a mente però!


6

Dai un'occhiata a BeeWare . Al momento di rispondere a questa domanda è ancora in fase di sviluppo. L'obiettivo è riuscire a creare app native con Python per tutti i sistemi operativi supportati, incluso Android.


Qual è la differenza toi Kivy? È basato su Gui Python portatile stabile
Carsten Thielepape il

5

Scopri enaml-native che prende il concetto di reazione nativa e lo applica a Python.

Consente agli utenti di creare app con widget Android nativi e fornisce API per utilizzare le librerie Android e Java da Python.

Si integra anche con Android-Studio e condivide alcune delle interessanti funzioni di sviluppo di Rea come il ricaricamento del codice e il debug remoto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.