web-dev-qa-db-fra.com

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

Nous travaillons sur une version S6 et cette plate-forme a une API Nice 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?

2097
e-satis

Une façon est d'utiliser Kivy :

Bibliothèque open source Python pour le développement rapide d'applications utilisant des interfaces utilisateur innovantes, telles que les applications tactiles multiples.

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

application Kivy Showcase

982
JohnMudd

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

Remarque: ne figure plus sous "développement actif", mais certaines fourchettes peuvent l'être.

335
Heat Miser

Oui! : Environnement de script Android

Un exemple via Matt Cutts via SL4A - "Voici un lecteur de code à 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)
211
unmounted

Il existe également SL4A écrit en gros par les employés de Google.

85
Rab Ross

"Le sous-ensemble Pygame pour Android est un portage d'un sous-ensemble des fonctionnalités de Pygame sur la plate-forme Android. Le but de ce projet est de permettre créer des jeux spécifiques à Android et faciliter le transfert de jeux depuis des plates-formes de type PC vers Android. "

Les exemples incluent un jeu complet emballé dans un APK, ce qui est très intéressant.

84
muriloq

J'ai posté des instructions et un correctif pour la compilation croisée Python 2.7.2 pour Android, vous pouvez l'obtenir sur mon blog ici: http://mdqinc.com/blog/2011/09/cross-compilation-python-pour-Android /

EDIT: J'ai open source Ignifuga , mon moteur de jeu 2D, basé sur Python/SDL et compilant pour Android. Même si vous ne l'utilisez pas pour les jeux, vous pourriez obtenir des idées utiles du code et de l'utilitaire de construction (nommé Schafer, d'après Tim ... vous savez qui).

73
gabomdq

Couche de script pour Android

SL4A fait ce que vous voulez. Vous pouvez facilement l'installer directement sur votre appareil à partir de leur site, sans avoir besoin de root.

Il supporte une gamme de langues. Python est le plus mature. Par défaut, il utilise Python 2.6, mais il existe un .2 port 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 bibliothèque Android pour chaque langue prise en charge. La bibliothèque fournit une interface à l'API Android sous-jacente via un seul objet Android.

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 à l'intérieur d'un script Python, puis utiliser HTML5 pour l'interface utilisateur. Lorsque vous utilisez des vues Web à partir de Python, vous pouvez faire passer des messages entre la vue Web et le processus Python qui l'a généré. L’UI ne sera pas native, mais c’est quand même une bonne option.
  • Il existe un support pour les interfaces utilisateur natives Android, mais je ne suis pas certain de son fonctionnement; Je ne l'ai tout simplement jamais utilisé.

Vous pouvez combiner des options afin d'avoir une vue Web pour l'interface principale tout en utilisant les dialogues natifs.

QPython

Il existe un projet tiers nommé QPython . Il s’appuie sur SL4A et ajoute quelques éléments utiles.

QPython vous donne une interface utilisateur plus agréable pour gérer votre installation et comprend un petit éditeur de code pour é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 groupe de Python sur Android, y compris Kivy, de sorte qu'il ne s'agit pas uniquement de SL4A.

Notez que QPython développe toujours sa fourche de SL4A (bien que, pas beaucoup pour être honnête). Le projet principal de SL4A est quasiment mort.

Liens utiles

72
Carl Smith

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

Un problème est qu’il n’ya pas que des langages de programmation pour les outils de développement Android. Un grand nombre des graphiques Android font appel à des fichiers XML pour configurer l'affichage, comme le HTML. Les objets Java intégrés sont vraiment intégrés à cette disposition XML et il est beaucoup plus facile que d'écrire votre propre code de passer de la logique à la bitmap.

L’autre problème est que le G1 (et probablement d’autres appareils Android dans un avenir proche) ne sont vraiment pas si rapides. Processeurs à 200 MHz et RAM est très limité. Même dans Java, vous devez effectuer une quantité décente de réécriture pour éviter la création plus d'objets si vous souhaitez que votre application soit parfaitement lisse. Python va être trop lent pendant un moment encore sur les appareils mobiles.

65
lacker

Kivy


Je veux poster ceci comme une extension de ce que @ JohnMudd a déjà répondu (mais s'il vous plait, gardez avec moi car l'anglais n'est pas mon premier mot langue)

Cela fait des années depuis et Kivy a évolué pour devenir v1.9-dev. Le plus gros atout de Kivy, à mon avis, est sa compatibilité entre plates-formes. Vous pouvez coder et tester sous votre environnement local (Windows/* nix, etc.), vous pouvez également créer, déboguer et mettre en package votre application pour qu'elle s'exécute sur vos appareils Android/iOS/Mac/Windows.

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

Actuellement Buildozer et python-pour-Android sont les outils les plus recommandés pour créer/empaqueter vos applications. Je les ai essayés tous les deux et je peux affirmer avec certitude qu'ils facilitent la création d'applications Android avec Python. Les utilisateurs qui se sentent à l'aise dans leur invite console/terminal/commande ne devraient avoir aucun problème à les utiliser, et leurs guides sont également bien documentés.

En outre, iOS est un autre point de vente important de Kivy, à condition que vous puissiez utiliser la même base de code avec de petites modifications nécessaires pour effectuer un test sur votre appareil iOS, via kivy-ios Outils Homebrew, bien que Xcode soit requis pour la construction avant de s'exécuter sur leurs appareils (autant que je sache, le simulateur iOS dans Xcode ne fonctionne pas pour la construction à architecture x86). Il existe également des problèmes de dépendance qui doivent être compilés manuellement et résolus dans Xcode pour une construction réussie, mais ils ne seraient pas trop difficiles à résoudre et les utilisateurs de Groupe Google de Kivy sont également d'une grande aide. .

Cela étant dit, les utilisateurs disposant de Python de bonnes connaissances ne devraient pas avoir de difficulté à acquérir les bases en quelques semaines (voire plusieurs jours) pour créer des applications simples.

Il est également intéressant de noter que vous pouvez regrouper (compiler des recettes) vos modules Python avec la compilation afin que les utilisateurs puissent réellement utiliser plusieurs bibliothèques existantes Python, comme Requests & PIL etc. à travers support d'extension de Kivy .

Parfois, votre application nécessite des fonctionnalités qui vont au-delà de ce que Kivy peut offrir. Dans ces cas, il est nécessaire de recourir à des bibliothèques de logiciels externes. Étant donné la richesse de l'écosystème Python, il existe déjà de nombreuses bibliothèques de logiciels que vous pouvez simplement importer et utiliser immédiatement.

Le dernier mais non le moindre, si vous allez utiliser Kivy pour des projets plus sérieux/commerciaux, vous pouvez trouver que les modules existants ne sont pas satisfaisants. Il existe cependant certaines solutions viables, avec les "travaux en cours" de pyjnius pour Android et pyobjus . Les utilisateurs peuvent désormais accéder aux classes Java/Objective-C via ces modules pour contrôler certaines des API natives.

Mon expérience à Kivy est qu’elle trouvera sa place parmi les programmeurs chevronnés Python et certains programmeurs sérieux qui souhaitent un développement rapide ou une maintenance simple de la base de code. Il fonctionne bien sur plusieurs plates-formes, mais pas vraiment avec le sentiment natif.

J'espère que certains Python programmeurs d'applications trouveront ces informations utiles et commenceront à jeter un coup d'œil à Kivy. Cela ne peut que s'améliorer (avec plus de support et à mesure que les bibliothèques/modules sont portés) si l'intérêt de la communauté suscite un vif intérêt

P.S. Je n'ai aucune relation avec Kivy, je suis simplement un programmeur qui aime vraiment l'idée d'apporter du plaisir de codage Python au développement mobile/multiplateforme.

41
Anzel

Pas pour le moment et vous auriez de la chance de faire travailler Jython bientôt. Si vous envisagez de commencer votre développement maintenant, vous feriez mieux de vous en tenir à Java pour le moment.

37
Ilya Kochetov

En utilisant SL4A (qui a déjà été mentionné par lui-même dans d’autres réponses), vous pouvez exécuter une instance complète web2py (autre frameworks Web python sont candidats potentiels ainsi). SL4A ne vous permet pas de créer des composants d’UI natifs (boutons, barres de défilement, etc.), mais il prend en charge WebViews . Une WebView n’est fondamentalement rien de plus qu’un navigateur Web épuré pointé à une adresse fixe. Je pense que l'application Gmail native utilise une WebView au lieu de suivre la route habituelle du widget.

Cet itinéraire 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 un périphérique Android ni un émulateur Android.
  • Quel que soit le code Python que vous écrivez pour le téléphone, il peut également être placé sur un serveur Web public avec très peu (le cas échéant) de modifications.
  • Vous pouvez tirer parti de tous les trucs fous du Web: requêtes, HTML5, CSS3, etc.
36
gdw2

J'utilise l'application QPython. Il possède un éditeur, une console et vous pouvez y exécuter vos programmes Python. L'application est gratuite et le lien est http://qpython.com/ .

27
kyle k

Vous pouvez utiliser l'application Termux :

Notez que apt install python install python 3. pour python 2, vous devez appeler apt install python2.

Quelques démos ici: https://www.youtube.com/watch?v=fqqsl72mASE

Et aussi la page github: https://github.com/termux

25
Adrian Stanculescu

Depuis le site Python pour Android :

Python pour Android est un projet permettant de créer votre propre distribution Python, y compris les modules de votre choix, et de créer un apk comprenant python, libs et votre application.

24
gdw2

Encore une autre tentative: https://code.google.com/p/Android-python27/

Celui-ci intègre directement l'interprète Python dans votre app apk.

18
e-satis

Chaquopy

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

  • Il fournit des API complètes pour appeler Java de Python ou Python de Java , ce qui permet au développeur d’utiliser le langage le mieux adapté à chaque composant de leur application.

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

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

Ceci est un produit commercial, mais il est gratuit pour une utilisation en source ouverte et restera toujours ainsi.

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

16
mhsmith

Il existe une application appelée QPython3 dans le magasin de lecture qui peut être utilisée à la fois pour l'édition et pour l'exécution du script python.

lien vers le magasin

Une autre application appelée Termux dans laquelle vous pouvez installer python à l'aide de la commande

pkg install python

Lien de magasin

Si vous souhaitez développer des applications, il existe Python Android Couche de script ( 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 Python liaisons pour le Qt 4.

Il y a 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.

16
pz64_

Vous pouvez exécuter votre code Python à l'aide de sl4a . sl4a prend en charge Python, Perl , JRuby , Lua , BeanShell, JavaScript, Tcl et le script Shell.

Vous pouvez apprendre sl4a Exemples Python .

14
Hitul

Il y a aussi python-on-a-chip qui peut éventuellement exécuter mosync: groupe google

14
fooba

Vous pouvez utiliser QPython :

Il possède une console Python, un éditeur, ainsi que des modules de gestion et d'installation.

http://qpython.com/

C'est un projet open source avec les deux implémentations Python 2 et Python 3. Vous pouvez télécharger les fichiers source et Android .apk directement à partir de github.

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

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

12
ode2k

N'a pas vu cela posté ici, mais vous pouvez le faire avec Pyside et Qt maintenant que Qt fonctionne sur Android grâce à Necessitas.

Cela semble assez compliqué pour le moment mais pourrait être un itinéraire viable à terme ...

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

10
radix07

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 supporte actuellement Python 3.4.2 ou 3.5.1 et la version 10d du NDK. Il peut également supporter les versions 3.3 et 9c, 11c et 12.

C'est sympa de le télécharger, de lancer make et d'obtenir le .so ou le .a

J'utilise actuellement cette application pour exécuter des fichiers Python bruts sur Android. Avec quelques modifications aux fichiers de construction, vous pouvez aussi créer x86 et armeabi 64 bit

10
GR Envoy

Une autre option semble être pyqtdeploy , citant la documentation est:

un outil qui, associé à 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 déploiement de l'application PyQt5 sur Android via pyqtdeploy et Qt5 , il est activement développé, bien qu'il soit difficile de trouver des exemples d'applications Android de travail ou de tutoriel sur la pour compiler toutes les bibliothèques requises sur Android. C'est un projet intéressant à garder à l'esprit cependant!

8
Andrzej Pronobis

Check out enaml-native qui reprend le concept react-native et l’applique à python.

Il permet aux utilisateurs de créer des applications avec les widgets Android natifs et fournit aux API l'utilisation des bibliothèques Android et Java à partir de python.

Il s'intègre également à Android-studio et partage quelques-unes des fonctionnalités de dev de Nice telles que le rechargement de code et le débogage à distance.

4
frmdstryr

Jetez un oeil à BeeWare . Au moment de répondre à cette question, il est encore au début du développement. 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.

4
DrawT