Is there a way to run Python on Android?
Asked Answered
L

23

2085

We are working on an S60 version and this platform has a nice Python API..

However, there is nothing official about Python on Android, but since Jython exists, is there a way to let the snake and the robot work together??

Lise answered 19/9, 2008 at 13:21 Comment(0)
P
1185

One way is to use 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.

Kivy Showcase app

Pit answered 18/11, 2011 at 21:49 Comment(9)
If you use Kivy, here is a tool to help package your project into an APK: github.com/kivy/python-for-androidOverwhelming
@julio Never had the chance to test it. We mostly do web app using jquery mobile instead.Lise
I've been playing around with Kivy this past week attempting to write a game. Their main developers were very quick to answer questions on IRC however if you've programmed a GUI before Kivy will make you say WTF quite a bit. Some examples of undocumented things that were weird for me: All widgets get every on_touch_down event even if the event occurred outside their region, No widget has a draw() method, almost everything happens via a custom observer pattern on custom Properties they made up (note these share the name with Python's property, but are not the same)Approximal
@Trey: What about non-GUI-related things? Are there any limitations regarding usage of Python's modules? What about access to Android-specific features, such as ability to read messages, add notification, work in the background, make a photo, read contacts list, determine GPS location etc.?Uitlander
And now there is iOS support too!Shel
To answer the old question of @Tadeck: Kivy has direct access to Android-specific features via pyjnius and (for a more pythonic wrapper) plyer. You can also use just about any pure python module, or modules with compiled components if you write (or there already exists) a python-for-android recipe - we already have recipes for many popular modules such as numpy, sqlalchemy and even django.Gombroon
@Overwhelming Can you package a Pyglet using python-for-android or does it only support Kivy?Quiroz
On the theme of limitations, one huge drawback of Kivy remains the inability to have text inputs that accept native keyboard suggestions from your device's keyboard (e.g. Gboard/Swiftkey) You only get the email/password type keyboard that doesn't offer suggestions. Tried for weeks to find a solution including modifying the java source code where it was switched off, but no dice (still doesn't work). Really huge limiting factor, although I don't really use keyboard suggestions, anyone who uses the app I made that is always their first question haha "why no suggestions/autocorrect?"Refute
With Google Colab and this: towardsdatascience.com/…, this is great, ease and fast!Consecutive
G
366

There is also the new Android Scripting Environment (ASE/SL4A) project. It looks awesome, and it has some integration with native Android components.

Note: no longer under "active development", but some forks may be.

Guayaquil answered 10/6, 2009 at 5:24 Comment(4)
True, but they have to have ASE installed, it's not a solution that lets you write an Android app in python without anything already installed (normal user will be all "wtf is this ASE thing?)Brigandine
Further, ASE is a restricted environment; you cannot write full-blown Android apps even if ASE is pre-installed. See stackoverflow.com/questions/2076381Cyndicyndia
I think it was renamed to SL4A.Outherod
You can write apps, package them, and even sell them on Play Store if you like, with SL4A now days. It's come along well since the comments above were posted. If you want Python on Android, then PY4A, which runs on SL4A is probably the best choice.Savarin
O
231

Yes! : Android Scripting Environment

An example via Matt Cutts via SL4A -- "here’s a barcode scanner written in six lines of Python code:

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)
Outbrave answered 10/6, 2009 at 5:13 Comment(4)
s/YES/meh. maybe/ ...it's extremely limited. anything graphical or multi touch? a big NO.Quieten
@Quieten you can't use the normal android widget set, but you can use "webviews" (which is what the native gmail application uses, for example).Overwhelming
golfed: 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']))Paunch
@gdw2, surely the native Gmail app only uses WebViews to parse emails though, not for the actual UI. That makes the comparison a bit absurd.Domash
B
94

Pygame Subset for Android

Pygame is a 2D game engine for Python (on desktop) that is popular with new programmers. The Pygame Subset for Android describes itself as...

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

The examples include a complete game packaged as an APK, which is pretty interesting.

Barolet answered 28/1, 2011 at 12:18 Comment(1)
Several aspects were broken on my Droid X (buttons, or touchscreen, can't remember), so I didn't get very far with this route.Overwhelming
H
91

As a Python lover and Android programmer, I'm sad to say this is not a good way to go. There are two problems:

One problem is that there is a lot more than just a programming language to the Android development tools. A lot of the Android graphics involve XML files to configure the display, similar to HTML. The built-in java objects are integrated with this XML layout, and it's a lot easier than writing your code to go from logic to bitmap.

The other problem is that the G1 (and probably other Android devices for the near future) are not that fast. 200 MHz processors and RAM is very limited. Even in Java, you have to do a decent amount of rewriting-to-avoid-more-object-creation if you want to make your app perfectly smooth. Python is going to be too slow for a while still on mobile devices.

Heiress answered 1/11, 2008 at 20:29 Comment(6)
There is not a single java word on an Android phone, it's compiled to byte code during the packaging process. Speed is not the issue : Google could provide tools producing the right byte code from a python code (like for Jython). BTW, Dalvik is not the Java VM so this is not about Java VS Python.Lise
JAVA bytecode still needs to be processed by a JVM, and the Java language requires a garbage collector anyway. Actual speed could only come from C++.Plead
@Touzen 2 more years later, we are running Intel Atom processor or octa-core processors now. ;)Corriecorriedale
Due to the difference in the power they are able to draw, phones will always be an order of magnitude slower than desktops. However, don't give up on Python for the mobile device, because typically only a fraction of the code is responsible for the processor-intensive work, and this fraction can be optimised by rewriting it in another language.Perished
By the way Google pushes Kotlin these days - which is a pretty unknown language to most users - it is clear that it's possible to support other languages than Java (I'm a Java dev and a Python fan). So I think the answer is rather a political one than a practical one.Whippersnapper
@Whippersnapper To be fair, Kotlin natively runs and compiles on the JVM, so integrating it is much easier than a non-JVM-language.Crosier
T
82

Cross-Compilation & Ignifuga

My blog has instructions and a patch for cross compiling Python 2.7.2 for Android.

I've also open sourced Ignifuga, my 2D Game Engine. It's Python/SDL based, and it cross compiles for Android. Even if you don't use it for games, you might get useful ideas from the code or builder utility (named Schafer, after Tim... you know who).

Toni answered 12/10, 2011 at 13:49 Comment(2)
Impressive. +1 for this. Not accepted because you can't possibly write anything for the public with this.Lise
If you mean you can not do graphic apps with it, you most definitely can, of course, more work is needed. I actually use this port combined with SDL 1.3, it's not trivial to go from the python interpreter to an interactive app, but it can be done.Toni
S
82

Scripting Layer for Android

SL4A does what you want. You can easily install it directly onto your device from their site, and do not need root.

It supports a range of languages. Python is the most mature. By default, it uses Python 2.6, but there is a 3.2 port you can use instead. I have used that port for all kinds of things on a Galaxy S2 and it worked fine.

API

SL4A provides a port of their android library for each supported language. The library provides an interface to the underlying Android API through a single Android object.

from android import Android

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

Each language has pretty much the same API. You can even use the JavaScript API inside webviews.

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

User Interfaces

For user interfaces, you have three options:

  • You can easily use the generic, native dialogues and menus through the API. This is good for confirmation dialogues and other basic user inputs.
  • You can also open a webview from inside a Python script, then use HTML5 for the user interface. When you use webviews from Python, you can pass messages back and forth, between the webview and the Python process that spawned it. The UI will not be native, but it is still a good option to have.
  • There is some support for native Android user interfaces, but I am not sure how well it works; I just haven't ever used it.

You can mix options, so you can have a webview for the main interface, and still use native dialogues.

QPython

There is a third party project named QPython. It builds on SL4A, and throws in some other useful stuff.

QPython gives you a nicer UI to manage your installation, and includes a little, touchscreen code editor, a Python shell, and a PIP shell for package management. They also have a Python 3 port. Both versions are available from the Play Store, free of charge. QPython also bundles libraries from a bunch of Python on Android projects, including Kivy, so it is not just SL4A.

Note that QPython still develop their fork of SL4A (though, not much to be honest). The main SL4A project itself is pretty much dead.

Useful Links

Savarin answered 19/3, 2012 at 15:45 Comment(2)
Can you use any of those to run python script from terminal or tasker? I can't find a way :(Bluejacket
You can launch an SL4A script from Tasker. There are some examples on this page that have snippets of Python being launched from Tasker. It is really a whole different question though.Savarin
P
67

Termux

You can use the Termux app, F-Droid link, which provides a POSIX environment for Android, to install Python.

Note that apt install python will install Python3 on Termux. For Python2, you need to use apt install python2.

Pedant answered 20/1, 2017 at 11:36 Comment(0)
V
59

Kivy

I wanted to add to what @JohnMudd has written about Kivy. It has been years since the situation he described, and Kivy has evolved substantially.

The biggest selling point of Kivy, in my opinion, is its cross-platform compatibility. You can code and test everything using any desktop environment (Windows/*nix etc.), then package your app for a range of different platforms, including Android, iOS, MacOS and Windows (though apps often lack the native look and feel).

With Kivy's own KV language, you can code and build the GUI interface easily (it's just like Java XML, but rather than TextView etc., KV has its own ui.widgets for a similar translation), which is in my opinion quite easy to adopt.

Currently Buildozer and python-for-android are the most recommended tools to build and package your apps. I have tried them both and can firmly say that they make building Android apps with Python a breeze. Their guides are well documented too.

iOS is another big selling point of Kivy. You can use the same code base with few changes required via kivy-ios Homebrew tools, although Xcode is required for the build, before running on their devices (AFAIK the iOS Simulator in Xcode currently doesn't work for the x86-architecture build). There are also some dependency issues which must be manually compiled and fiddled around with in Xcode to have a successful build, but they wouldn't be too difficult to resolve and people in Kivy Google Group are really helpful too.

With all that being said, users with good Python knowledge should have no problem picking up the basics quickly.

If you are using Kivy for more serious projects, you may find existing modules unsatisfactory. There are some workable solutions though. With the (work in progress) pyjnius for Android, and pyobjus, users can now access Java/Objective-C classes to control some of the native APIs.

Vexed answered 13/1, 2015 at 2:8 Comment(0)
C
41

Making Android apps with Python has come a long way in the past couple of years.

One new way is using the FireMonkey (FMX) framework for Python. FMX is a GUI framework for developing apps for many platforms, with Android being one of them.

You can use PythonFMXBuilder to build your Android App once you're finished programming it.

Cimbalom answered 19/9, 2008 at 13:26 Comment(0)
O
40

Using SL4A (which has already been mentioned by itself in other answers) you can run a full-blown web2py instance (other python web frameworks are likely candidates as well). SL4A doesn't allow you to do native UI components (buttons, scroll bars, and the like), but it does support WebViews. A WebView is basically nothing more than a striped down web browser pointed at a fixed address. I believe the native Gmail app uses a WebView instead of going the regular widget route.

This route would have some interesting features:

  • In the case of most python web frameworks, you could actually develop and test without using an android device or android emulator.
  • Whatever Python code you end up writing for the phone could also be put on a public webserver with very little (if any) modification.
  • You could take advantage of all of the crazy web stuff out there: query, HTML5, CSS3, etc.
Overwhelming answered 6/1, 2012 at 14:34 Comment(1)
Cherrypy works well, with ws4py websocket support. Bottle is also fine on SL4A.Savarin
R
39

QPython

I use the QPython app. It's free and includes a code editor, an interactive interpreter and a package manager, allowing you to create and execute Python programs directly on your device.

Rhatany answered 12/6, 2013 at 19:46 Comment(1)
Now qpython added Django support! That's all that I need! Amazing!Seve
S
38

Here are some tools listed in official python website


There is an app called QPython3 in playstore which can be used for both editing and running python script.

Playstore link


Another app called Termux in which you can install python using command

pkg install python

Playstore Link


If you want develop apps , there is 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.


You can also check PySide for Android, which is actually Python bindings for the Qt 4.


There's a platform called PyMob where apps can be written purely in Python and the compiler tool-flow (PyMob) converts them in native source codes for various platforms.


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


Try Chaquopy A Python SDK for 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.

Scorper answered 15/4, 2017 at 14:9 Comment(1)
using Termux you can install python 2 as well $ apt install python2Ghastly
O
29

From the Python for android site:

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.

Overwhelming answered 9/1, 2012 at 4:46 Comment(3)
@e-satis: Thanks for your comment. I don't see which answer I'm duplicating. I can only guess that you think PFA is the same as Kivy. Though it's hosted under the Kivy project, you don't even have to use Kivy to use PFA.Overwhelming
Check @tito's deleted answer at the bottom point to PFA. Plus, there is little interest is running PFA without kivy since it's the only toolkit you got.Lise
It's not because kivy is currently the only toolkit available (some people are working to intregrate others) than it's a duplicate. Please consider the others options as-it, and not merge all into one post :|Pyramid
E
29

Chaquopy

Chaquopy is a plugin for Android Studio's Gradle-based build system. It focuses on close integration with the standard Android development tools.

  • It provides complete APIs to call Java from Python or Python from Java, allowing the developer to use whichever language is best for each component of their app.

  • It can automatically download PyPI packages and build them into an app, including selected native packages such as NumPy.

  • It enables full access to all Android APIs from Python, including the native user interface toolkit (example pure-Python activity).

This used to be a commercial product, but it's now free and open-source.

(I am the creator of this product.)

Edva answered 16/2, 2018 at 17:12 Comment(1)
Just want to add that I was very impressed by this option. It works really well. Pricing isn't terrible (free for open source apps, $50 one time payment for closed source apps). I have decided against running python on Android because it bloats app size A LOT, but if that isn't a concern I really recommend this optionHoang
L
22

Yet another attempt: https://code.google.com/p/android-python27/

This one embed directly the Python interpretter in your app apk.

Lise answered 9/5, 2012 at 15:44 Comment(0)
S
17

You can run your Python code using sl4a. sl4a supports Python, Perl, JRuby, Lua, BeanShell, JavaScript, Tcl, and shell script.

You can learn sl4a Python Examples.

Syndesis answered 11/3, 2013 at 9:36 Comment(0)
K
15

You can use QPython:

It has a Python Console, Editor, as well as Package Management / Installers

http://qpython.com/

It's an open source project with both Python 2 and Python 3 implementations. You can download the source and the Android .apk files directly from github.

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

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

Kenosis answered 16/9, 2016 at 2:41 Comment(0)
P
15

Take a look at BeeWare. It has grown significantly. It is awarded with PSF (Python Software Foundation) Education Grant.

Beeware's aim is to be able to create native apps with Python for all supported operating systems, including Android.

Official Website: Beeware

Github Repo: https://github.com/beeware

Putrefy answered 12/1, 2018 at 18:56 Comment(1)
What is the difference toi Kivy? It is stable portable python Gui basedCusped
R
14

Another option if you are looking for 3.4.2 or newer (3.9.6 as of this writing) is this archive on GitHub.

Python3-Android 3.4.2 or Python3-Android 3.9.6

I believe the original archive supports Python 3.4.2, the latest GRRedwings branch support 3.9.6 and the 22b version of the NDK. Older branches support other versions, but are not as easy to compile with docker.

The older version you simply clone the archive, run make and you get the .so or the .a

The newer versions follow the ReadMe, but it uses docker for consistent builds.

I currently use this to run raw Python on android devices. With a couple modifications to the build files you can also make x86 and armeabi 64 bit

Rhizomorphous answered 25/2, 2015 at 13:4 Comment(0)
A
12

Didn't see this posted here, but you can do it with Pyside and Qt now that Qt works on Android thanks to Necessitas.

It seems like quite a kludge at the moment but could be a viable route eventually...

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

Alanis answered 6/10, 2014 at 14:59 Comment(0)
S
9

One more option seems to be pyqtdeploy which citing the docs is:

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

According to Deploying PyQt5 application to Android via pyqtdeploy and Qt5 it is actively developed, although it is difficult to find examples of working Android apps or tutorial on how to cross-compile all the required libraries to Android. It is an interesting project to keep in mind though!

Sedulous answered 18/5, 2015 at 1:56 Comment(0)
N
5

Check out enaml-native which takes the react-native concept and applies it to python.

It lets users build apps with native Android widgets and provides APIs to use android and java libraries from python.

It also integrates with android-studio and shares a few of react's nice dev features like code reloading and remote debugging.

Nonsmoker answered 16/1, 2018 at 16:1 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.