Existe-t-il un moyen d'exécuter Python sur Android?

2092

Nous travaillons sur une version S60 et cette plateforme dispose d'une belle API Python ..

Cependant, il n'y a rien d'officiel à propos de Python sur Android, mais puisque Jython existe, existe-t-il un moyen de laisser le serpent et le robot travailler ensemble ??

e-satis
la source

Réponses:

1061

Une façon consiste à utiliser Kivy :

Bibliothèque Python open source pour le développement rapide d'applications qui utilisent des interfaces utilisateur innovantes, telles que les applications multi-touch.

Kivy fonctionne sur Linux, Windows, OS X, Android et iOS. Vous pouvez exécuter le même code [python] sur toutes les plateformes prises en charge.

Application Kivy Showcase

JohnMudd
la source
63
Si vous utilisez Kivy, voici un outil pour vous aider à empaqueter votre projet dans un APK: github.com/kivy/python-for-android
gdw2
17
J'ai joué avec Kivy la semaine dernière pour essayer d'écrire un jeu. Leurs principaux développeurs ont été très rapides pour répondre aux questions sur IRC, mais si vous avez programmé une interface graphique avant que Kivy ne vous fasse dire un peu WTF. Quelques exemples de choses non documentées qui étaient bizarres pour moi: tous les widgets obtiennent chaque événement on_touch_down même si l'événement s'est produit en dehors de leur région, aucun widget n'a une méthode draw (), presque tout se passe via un modèle d'observateur personnalisé sur les propriétés personnalisées qu'ils ont constituées ( notez que ceux-ci partagent le nom avec la propriété de Python, mais ne sont pas les mêmes)
Trey Stout
7
@Trey: Qu'en est-il des éléments non liés à l'interface graphique? Y a-t-il des limitations concernant l'utilisation des modules de Python? Qu'en est-il de l'accès aux fonctionnalités spécifiques à Android, telles que la capacité de lire les messages, d'ajouter des notifications, de travailler en arrière-plan, de faire une photo, de lire la liste des contacts, de déterminer l'emplacement GPS, etc.?
Tadeck
7
Et maintenant, il existe également un support iOS!
rubik
16
Maintenant, presque un an plus tard, le support est-il meilleur? Y a-t-il eu des améliorations notables?
TankorSmash
347

Il y a aussi le nouveau projet Android Scripting Environment (ASE / SL4A). Il a l'air génial et il a une certaine intégration avec les composants Android natifs.

Remarque: n'est plus sous "développement actif", mais certaines fourches peuvent l'être.

Heat Miser
la source
70
Certes, mais ils doivent avoir installé ASE, ce n'est pas une solution qui vous permet d'écrire une application Android en python sans que rien ne soit déjà installé (l'utilisateur normal sera tout "wtf est-ce ASE?)
Stuart Axon
20
De plus, ASE est un environnement restreint; vous ne pouvez pas écrire d'applications Android à part entière même si ASE est préinstallé. Voir stackoverflow.com/questions/2076381
Sridhar Ratnakumar
10
Je pense qu'il a été renommé SL4A.
Vanuan
9
Vous pouvez écrire des applications, les emballer et même les vendre sur Play Store si vous le souhaitez, avec SL4A de nos jours. Cela s'est bien passé depuis la publication des commentaires ci-dessus. Si vous voulez Python sur Android, alors PY4A, qui fonctionne sur SL4A, est probablement le meilleur choix.
Carl Smith
2
Je confirme, SL4A permet désormais d'écrire des packages d'application prêts à l'emploi, j'ai essayé avec perl ça marche
ubugnu
216

Oui! : Environnement de script Android

Un exemple via Matt Cutts via SL4A - "voici un scanner de codes à barres écrit en six lignes de code 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)
démonté
la source
46
s / OUI / meh. peut-être / ... c'est extrêmement limité. quelque chose de graphique ou multi tactile? un gros NON.
gcb
2
@gcb, vous ne pouvez pas utiliser l'ensemble de widgets Android normal, mais vous pouvez utiliser des "vues Web" (c'est ce que l'application gmail native utilise, par exemple).
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, l'application Gmail native n'utilise sûrement que des WebViews pour analyser les e-mails, pas pour l'interface utilisateur réelle. Cela rend la comparaison un peu absurde.
Veselin Romić
88

Sous-ensemble Pygame pour Android

Pygame est un moteur de jeu 2D pour Python (sur ordinateur) populaire auprès des nouveaux programmeurs. Le sous-ensemble Pygame pour Android se décrit comme ...

... un port d'un sous-ensemble de fonctionnalités Pygame vers la plateforme Android. L'objectif du projet est de permettre la création de jeux spécifiques à Android et de faciliter le portage de jeux depuis des plateformes de type PC vers Android.

Les exemples incluent un jeu complet emballé sous forme d'APK, ce qui est assez intéressant.

muriloq
la source
4
Plusieurs aspects ont été brisés sur mon Droid X (boutons ou écran tactile, je ne me souviens pas), donc je n'ai pas été très loin avec cet itinéraire.
gdw2
78

Compilation croisée et Ignifuga

Mon blog contient des instructions et un correctif pour la compilation croisée de Python 2.7.2 pour Android.

J'ai également ouvert Ignifuga , mon moteur de jeu 2D. Il est basé sur Python / SDL et compile de manière croisée pour Android. Même si vous ne l'utilisez pas pour les jeux, vous pourriez obtenir des idées utiles du code ou de l'utilitaire de création (nommé Schafer , d'après Tim ... vous savez qui).

gabomdq
la source
4
Impressionnant. +1 pour cela. Non accepté car vous ne pouvez pas écrire quoi que ce soit pour le public avec cela.
e-satis
1
Si vous voulez dire que vous ne pouvez pas faire d'applications graphiques avec cela, vous pouvez bien sûr, plus de travail est nécessaire. J'utilise en fait ce port combiné avec SDL 1.3, ce n'est pas trivial de passer de l'interpréteur python à une application interactive, mais cela peut être fait.
gabomdq
77

Couche de script pour Android

SL4A fait ce que vous voulez. Vous pouvez facilement l'installer directement sur votre appareil depuis leur site, et n'avez pas besoin de root.

Il prend en charge une gamme de langues. Le python est le plus mature. Par défaut, il utilise Python 2.6, mais il existe un port 3.2 que vous pouvez utiliser à la place. J'ai utilisé ce port pour toutes sortes de choses sur un Galaxy S2 et cela a bien fonctionné.

API

SL4A fournit un port de leur androidbibliothèque pour chaque langue prise en charge. La bibliothèque fournit une interface à l'API Android sous-jacente via un seul Androidobjet.

from android import Android

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

Chaque langue a à peu près la même API. Vous pouvez même utiliser l'API JavaScript dans les vues Web.

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

Les interfaces des utilisateurs

Pour les interfaces utilisateur, vous avez trois options:

  • Vous pouvez facilement utiliser les menus et les dialogues génériques et natifs via l'API. C'est bon pour les dialogues de confirmation et autres entrées utilisateur de base.
  • Vous pouvez également ouvrir une vue Web à partir d'un script Python, puis utiliser HTML5 pour l'interface utilisateur. Lorsque vous utilisez des vues Web à partir de Python, vous pouvez passer des messages dans les deux sens, entre la vue Web et le processus Python qui l'a généré. L'interface utilisateur ne sera pas native, mais c'est toujours une bonne option.
  • Il existe une certaine prise en charge des interfaces utilisateur natives d'Android, mais je ne sais pas dans quelle mesure cela fonctionne; Je ne l'ai jamais utilisé.

Vous pouvez mélanger les options afin d'avoir une vue Web pour l'interface principale et toujours utiliser des dialogues natifs.

QPython

Il existe un projet tiers nommé QPython . Il s'appuie sur SL4A et ajoute d'autres éléments utiles.

QPython vous offre une interface utilisateur plus agréable pour gérer votre installation et comprend un petit éditeur de code à écran tactile, un shell Python et un shell PIP pour la gestion des packages. Ils ont également un port Python 3. Les deux versions sont disponibles gratuitement sur le Play Store. QPython regroupe également les bibliothèques d'un tas de Python sur des projets Android, y compris Kivy, donc ce n'est pas seulement SL4A.

Notez que QPython développe toujours sa fourchette de SL4A (cependant, pas beaucoup pour être honnête). Le projet SL4A principal lui-même est quasiment mort.

Liens utiles

Carl Smith
la source
1
Pouvez-vous utiliser l'un d'entre eux pour exécuter un script python depuis un terminal ou un tasker? Je ne trouve pas de moyen :(
Pitto
1
Vous pouvez lancer un script SL4A à partir de Tasker. Il y a quelques exemples sur cette page qui ont des extraits de Python lancés à partir de Tasker. C'est vraiment une toute autre question.
Carl Smith, le
77

En tant qu'amoureux de Python et programmeur Android, je suis triste de dire que ce n'est pas une bonne façon de procéder. Il y a deux problèmes:

Un problème est qu'il existe bien plus qu'un simple langage de programmation pour les outils de développement Android. Beaucoup de graphiques Android impliquent des fichiers XML pour configurer l'affichage, similaire au HTML. Les objets java intégrés sont intégrés à cette disposition XML, et c'est beaucoup plus facile que d'écrire votre code pour passer de la logique au bitmap.

L'autre problème est que le G1 (et probablement d'autres appareils Android dans un avenir proche) ne sont pas aussi rapides. Les processeurs 200 MHz et la RAM sont très limités. Même en Java, vous devez effectuer une quantité décente de réécriture pour éviter plus de création d'objet si vous voulez rendre votre application parfaitement fluide. Python va être trop lent pendant un certain temps sur les appareils mobiles.

laque
la source
48
Il n'y a pas un seul mot java sur un téléphone Android, il est compilé en code octet pendant le processus de packaging. La vitesse n'est pas le problème: Google pourrait fournir des outils produisant le bon code d'octet à partir d'un code python (comme pour Jython). BTW, Dalvik n'est pas la machine virtuelle Java, il ne s'agit donc pas de Java VS Python.
e-satis
6
Le bytecode JAVA doit toujours être traité par une machine virtuelle Java, et le langage Java nécessite de toute façon un garbage collector. La vitesse réelle ne peut provenir que de C ++.
LtWorf
19
@Touze 2 ans plus tard, nous utilisons maintenant un processeur Intel Atom ou des processeurs octa-core. ;)
Rohan Kandwal
2
En raison de la différence de puissance qu'ils peuvent tirer, les téléphones seront toujours plus lents que les ordinateurs de bureau. Cependant, n'abandonnez pas Python pour l'appareil mobile, car généralement, seule une fraction du code est responsable du travail gourmand en processeur, et cette fraction peut être optimisée en le réécrivant dans une autre langue.
Evgeni Sergeev
2
Au fait, Google pousse Kotlin de nos jours - qui est une langue assez inconnue pour la plupart des utilisateurs - il est clair qu'il est possible de prendre en charge d'autres langues que Java (je suis un développeur Java et un fan de Python). Je pense donc que la réponse est plutôt politique que pratique.
Alex
49

Kivy

Je voulais ajouter à ce que @JohnMudd a écrit sur Kivy. Cela fait des années que la situation qu'il a décrite n'a pas changé et Kivy a considérablement évolué.

Le plus gros argument de vente de Kivy, à mon avis, est sa compatibilité multiplateforme. Vous pouvez tout coder et tester tout en utilisant n'importe quel environnement de bureau (Windows / * nix, etc.), puis empaqueter votre application pour une gamme de plates-formes différentes, y compris Android, iOS, MacOS et Windows (bien que les applications manquent souvent de l'aspect et de la convivialité natifs).

Avec le propre langage KV de Kivy , vous pouvez facilement coder et construire l'interface GUI (c'est comme Java XML, mais plutôt que TextView etc., KV a le sien ui.widgetspour une traduction similaire), ce qui est à mon avis assez facile à adopter.

Actuellement, Buildozer et python-for-android sont les outils les plus recommandés pour créer et empaqueter vos applications. Je les ai essayés tous les deux et je peux affirmer fermement qu'ils font de la création d'applications Android avec Python un jeu d'enfant. Leurs guides sont également bien documentés.

iOS est un autre gros argument de vente de Kivy. Vous pouvez utiliser la même base de code avec quelques modifications requises via les outils kivy-ios Homebrew, bien que Xcode soit requis pour la construction, avant de s'exécuter sur leurs appareils (AFAIK, le simulateur iOS dans Xcode ne fonctionne pas actuellement pour la construction à architecture x86) . Il y a aussi des problèmes de dépendance qui doivent être compilés et manipulés manuellement dans Xcode pour avoir une construction réussie, mais ils ne seraient pas trop difficiles à résoudre et les gens de Kivy Google Group sont également très utiles.

Cela étant dit, les utilisateurs ayant une bonne connaissance de Python ne devraient pas avoir de problème à comprendre rapidement les bases.

Si vous utilisez Kivy pour des projets plus sérieux, vous pouvez trouver les modules existants insatisfaisants. Il existe cependant des solutions viables. Avec (en cours) pyjnius pour Android et pyobjus , les utilisateurs peuvent désormais accéder aux classes Java / Objective-C pour contrôler certaines des API natives.

Anzel
la source
Je viens de télécharger Kivy depuis son site. Affiche la prise en charge de Python 3.4 32 et 64 bits et une démonstration du fonctionnement de l'entrée tactile.
codeReview
1
@codeReview, j'ai utilisé Kivy avec Python2 uniquement et je n'ai aucune expérience avec Python3, tout se déroule-t-il correctement?
Anzel
J'espère que vous le saurez bientôt. Mais je n'ai aucune expérience avec Python en dehors des fichiers .py du shell de commande CPython 3.4 pour résoudre rapidement les problèmes de calcul ou d'algorithme. Ce sera ma première application avec une interface graphique. Je devrais lire plus de documentation, comprendre le langage Kivy et suivre attentivement les étapes d'installation, donc je sais comment installer Kivi sur mon IDE Python de choix et empaqueter l'APK pour le pousser vers Android. Il s'agit d'un processus en plusieurs étapes, donc ce ne sera peut-être pas incroyablement tôt quand je peux le dire.
codeReview
1
@codeReview, bonne chance pour votre voyage. S'il s'agit de votre première application, je vous recommande fortement d'utiliser .kv comme fichier de mise en page. C'est comme un fichier yaml ou simplement arborescent pour définir les widgets de mise en page. Si votre application est multi-écrans / mises en page, utilisez-la ScreenManagercar cela vous fera gagner des tonnes de temps. Un conseil est également de lire leur liste de diffusion, un groupe de personnes compétentes qui sont là pour vous aider.
Anzel
1
@codeReview, également, au lieu d'apprendre de l'application de démonstration de Kivy, vous pouvez obtenir plus d'informations en recherchant certaines applications kivy existantes et voir comment les gens gèrent les "widgets" et les rappels dans un scénario réel. Kivy n'est pas difficile à apprendre du tout, je dirai beaucoup plus facile en termes de courbe d'apprentissage que de dire, en Java + Android ou objective-C + iOS
Anzel
40

Termux

Vous pouvez utiliser l' application Termux , qui fournit un environnement POSIX pour Android, pour installer Python.

Notez que apt install pythonva installer Python3 sur Termux. Pour Python2, vous devez utiliser apt install python2.

Adrian Stanculescu
la source
5
+1 pour Termux. Environnement absolument merveilleux pour travailler. Grande sélection de packages dans les dépôts, raccourcis de boutons de volume pratiques. C'est la chose la plus proche de Debian sur un téléphone que j'ai jamais trouvée.
James
39

Pas pour le moment et vous auriez la chance de faire fonctionner Jython bientôt. Si vous prévoyez de commencer votre développement maintenant, vous feriez mieux de vous en tenir à Java pour l'instant.

Ilya Kochetov
la source
39

En utilisant SL4A (qui a déjà été mentionné par lui-même dans d'autres réponses), vous pouvez exécuter une instance Web2py complète (d'autres frameworks Web Python sont également des candidats potentiels). SL4A ne vous permet pas de faire des composants d'interface utilisateur natifs (boutons, barres de défilement, etc.), mais il prend en charge les WebViews . Une WebView n'est rien de plus qu'un navigateur Web rayé pointant vers une adresse fixe. Je pense que l'application native Gmail utilise une WebView au lieu de suivre la route normale des widgets.

Cette route aurait des caractéristiques intéressantes:

  • Dans le cas de la plupart des frameworks Web Python, vous pouvez réellement développer et tester sans utiliser d'appareil Android ou d'émulateur Android.
  • Quel que soit le code Python que vous finissez par écrire pour le téléphone, il peut également être placé sur un serveur Web public avec très peu (voire aucune) modification.
  • Vous pouvez profiter de tous les trucs fous du Web: requête, HTML5, CSS3, etc.
gdw2
la source
2
Cherrypy fonctionne bien, avec le support websocket ws4py. La bouteille est également très bien sur SL4A.
Carl Smith
33

QPython

J'utilise l'application QPython . Il est gratuit et comprend un éditeur de code, un interpréteur interactif et un gestionnaire de packages, vous permettant de créer et d'exécuter des programmes Python directement sur votre appareil.

kyle k
la source
2
Maintenant, qpython a ajouté le support de Django! C'est tout ce dont j'ai besoin! Incroyable!
swdev
27

Depuis le site Python pour Android :

Python pour Android est un projet pour créer votre propre distribution Python, y compris les modules que vous souhaitez, et créer un apk comprenant python, des bibliothèques et votre application.

gdw2
la source
1
@ e-satis: Merci pour votre commentaire. Je ne vois pas quelle réponse je reproduis. Je peux seulement deviner que vous pensez que PFA est identique à Kivy. Bien qu'il soit hébergé dans le cadre du projet Kivy, vous n'avez même pas besoin d'utiliser Kivy pour utiliser PFA.
gdw2
Vérifiez la réponse supprimée de @ tito au point bas de PFA. De plus, il y a peu d'intérêt à exécuter PFA sans kivy car c'est la seule boîte à outils que vous avez.
e-satis
Ce n'est pas parce que kivy est actuellement la seule boîte à outils disponible (certaines personnes travaillent pour en intégrer d'autres) que c'est un doublon. Veuillez considérer les autres options comme telles, et ne pas les fusionner en un seul message: |
tito
21

Chaquopy

Chaquopy est un plugin pour le système de construction basé sur Gradle d'Android Studio. Il se concentre sur une intégration étroite avec les outils de développement Android standard.

  • Il fournit des API complètes pour appeler Java à partir de Python ou Python à partir de Java , permettant au développeur d'utiliser le langage le mieux adapté à chaque composant de son application.

  • Il peut télécharger automatiquement les packages PyPI et les intégrer dans une application, y compris des packages natifs sélectionnés tels que NumPy.

  • Il permet un accès complet à toutes les API Android à partir de Python, y compris la boîte à outils de l'interface utilisateur native ( exemple d'activité pure-Python ).

Il s'agit d'un produit commercial, mais il est gratuit pour une utilisation open-source et le restera toujours.

(Je suis le créateur de ce produit.)

mhsmith
la source
20

Voici quelques outils répertoriés sur le site officiel de Python


Il existe une application appelée QPython3 dans playstore qui peut être utilisée à la fois pour éditer et exécuter un script python.

Lien Playstore


Une autre application appelée Termux dans laquelle vous pouvez installer python en utilisant la commande

pkg install python

Lien Playstore


Si vous souhaitez développer des applications, il 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.


Vous pouvez également vérifier PySide pour Android , qui est en fait des liaisons Python pour Qt 4.


Il existe une plate-forme appelée PyMob où les applications peuvent être écrites uniquement en Python et le flux d'outils du compilateur (PyMob) les convertit en codes sources natifs pour diverses plates-formes.


Vérifiez également 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.


Essayez Chaquopy A Python SDK pour 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_
la source
2
en utilisant Termux, vous pouvez également installer python 2 $ apt install python2
M.Hefny
13

Vous pouvez utiliser QPython :

Il a une console Python, un éditeur, ainsi que des gestionnaires / installateurs de packages

http://qpython.com/

Il s'agit d'un projet open source avec des implémentations Python 2 et Python 3. Vous pouvez télécharger la source et les fichiers Android .apk directement depuis github.

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

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

ode2k
la source
12

Une autre option si vous recherchez 3.4.2 ou 3.5.1 est cette archive sur GitHub.

Python3-Android 3.4.2 ou Python3-Android 3.5.1

Il prend actuellement en charge Python 3.4.2 ou 3.5.1 et la version 10d du NDK. Il peut également prendre en charge 3.3 et 9c, 11c et 12

C'est bien parce que vous le téléchargez simplement, lancez make et vous obtenez le .so ou le .a

Je l'utilise actuellement pour exécuter Python brut sur des appareils Android. Avec quelques modifications aux fichiers de construction, vous pouvez également créer x86 et armeabi 64 bits

Envoyé GR
la source
11

Je n'ai pas vu cela publié ici, mais vous pouvez le faire avec Pyside et Qt maintenant que Qt fonctionne sur Android grâce à Necessitas.

Cela semble un peu compliqué pour le moment, mais pourrait éventuellement être une voie viable ...

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

radix07
la source
9

Une autre option semble être pyqtdeploy qui citant les documents est:

un outil qui, conjointement avec d'autres outils fournis avec Qt, permet le déploiement d'applications PyQt4 et PyQt5 écrites avec Python v2.7 ou Python v3.3 ou version ultérieure. Il prend en charge le déploiement sur des plates-formes de bureau (Linux, Windows et OS X) et sur des plates-formes mobiles (iOS et Android).

Selon Deploying PyQt5 application to Android via pyqtdeploy et Qt5, il est activement développé, bien qu'il soit difficile de trouver des exemples d'applications Android fonctionnelles ou un tutoriel sur la façon de compiler de manière croisée toutes les bibliothèques requises vers Android. C'est un projet intéressant à garder à l'esprit!

Andrzej Pronobis
la source
6

Jetez un œil à BeeWare . Au moment de répondre à cette question, elle en est encore à ses débuts. Son objectif est de pouvoir créer des applications natives avec Python pour tous les systèmes d'exploitation pris en charge, y compris Android.

DrawT
la source
Quelle est la différence toi Kivy? C'est un python portable stable basé sur Gui
Carsten Thielepape
5

Découvrez enaml-native qui prend le concept react-native et l'applique à python.

Il permet aux utilisateurs de créer des applications avec des widgets Android natifs et fournit des API pour utiliser les bibliothèques Android et Java à partir de Python.

Il s'intègre également à android-studio et partage quelques-unes des fonctionnalités de développement intéressantes de react comme le rechargement de code et le débogage à distance.

frmdstryr
la source