Skip to content
Turn your Python application into an Android APK
Python Java C Makefile HTML Shell
Branch: develop
Clone or download
opacam Recipes tests enhancements (#1984)
This is a follow up of #1982

In here we do:
  - Move from `__new__` to `__init__` for `BaseTestForMakeRecipe` ([discussed at here](#1982 (comment)))
  - Convert cls attributes to instance attributes ([discussed at here](#1982 (comment)))
  -  Remove `mock` dependency for py3 tests (Because, as per Python 3.3+, `mock` it's a built-in-module). (Unfortunately we still will have a couple of `import mock` entries that we cannot remove until we completely remove python2 from our tests)

* [test] From `__new__` to `__init__` for `BaseTestForMakeRecipe`

* [test] Remove mock dependency for py3 tests

Because, as per Python 3.3+, `mock` it's a built-in-module

* [test] Convert cls attributes to instance attributes

Because we may have some side effects without willing, considering that cls attributes are shared between instances.
Latest commit 2f98b81 Sep 15, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github Updates docs mentioning IRC to use Discord Oct 9, 2018
ci [recipe-stl] Rework of protobuf_cpp recipe (#1969) Aug 30, 2019
doc Added libffi headers troubleshooting note to doc (#1972) Aug 26, 2019
pythonforandroid A bunch of tests for library recipes (#1982) Sep 14, 2019
testapps [crystax] Drop CrystaX support and code base Jul 11, 2019
tests Recipes tests enhancements (#1984) Sep 15, 2019
.coveragerc [coverage] Add coverage with `coveralls` 👖 Jun 3, 2019
.dockerignore Creates non root user in Dockerfile Oct 24, 2018
.gitignore [gitignore] Remove `nosetests.xml` from gitignore Jul 10, 2019
.projectile Added .projectile Oct 4, 2015
.travis.yml [CI] Fix CI's test for `arm64-v8a` (#1977) Sep 1, 2019
Dockerfile.py2 Fix build for case-insensitive FS and add CI test for OSX (#1951) Aug 23, 2019
LICENSE Update copyright year Aug 11, 2017 Deleted pygame build components May 26, 2019 Updated to clarify NDK versions (#1981) Sep 12, 2019 Drop Python 2 support (#1918) Aug 4, 2019
tox.ini Recipes tests enhancements (#1984) Sep 15, 2019


Build Status Coverage Status Backers on Open Collective Sponsors on Open Collective

python-for-android is a packaging tool for Python apps on Android. You can create your own Python distribution including the modules and dependencies you want, and bundle it in an APK along with your own code.

Features include:

  • Support for building with both Python 2 and Python 3.
  • Different app backends including Kivy, PySDL2, and a WebView with Python webserver.
  • Automatic support for most pure Python modules, and built in support for many others, including popular dependencies such as numpy and sqlalchemy.
  • Multiple architecture targets, for APKs optimised on any given device.

For documentation and support, see:


Follow the quickstart instructions to install and begin creating APKs.

Quick instructions: install python-for-android with:

pip install python-for-android

(for the develop branch: pip install git+

Test that the install works with:

p4a --version

To build any actual apps, set up the Android SDK and NDK as described in the quickstart. Use the SDK/NDK API level & NDK version as in the quickstart, other API levels may not work.

With everything installed, build an APK with SDL2 with e.g.:

p4a apk --requirements=kivy --private /home/username/devel/planewave_frozen/ --package=net.inclem.planewavessdl2 --name="planewavessdl2" --version=0.5 --bootstrap=sdl2

For full instructions and parameter options, see the documentation.


If you need assistance, you can ask for help on our mailing list:

We also have #support Discord channel.


We love pull requests and discussing novel ideas. Check out the Kivy project contribution guide and feel free to improve python-for-android.

See our documentation for more information about the python-for-android development and release model, but don't worry about the details. You just need to make a pull request, we'll take care of the rest.

The following mailing list and IRC channel are used exclusively for discussions about developing the Kivy framework and its sister projects:

We also have #dev Discord channel.


python-for-android is released under the terms of the MIT License. Please refer to the LICENSE file.


In 2015 these tools were rewritten to provide a new, easier-to-use and easier-to-extend interface. If you'd like to browse the old toolchain, its status is recorded for posterity at at

In the last quarter of 2018 the python recipes were changed. The new recipe for python3 (3.7.1) had a new build system which was applied to the ancient python recipe, allowing us to bump the python2 version number to 2.7.15. This change unified the build process for both python recipes, and probably solved various issues detected over the years. It should also be mentioned that these unified python recipes require a minimum target api level of 21, Android 5.0 - Lollipop, so in the case that you need to build targeting an api level below 21, you should use an older version of python-for-android (<=0.7.1).

Be aware that this project is in constant development so, as per time of writing, you should use a minimum on Android's NDK r19, and we recommend using NDK r19b. This is because the toolchains installed by default with the NDK can be used in-place and the python-for-android project has been adapted for that feature. Also be aware that more recent versions of the Android's NDK may not work.

Those mentioned changes has been done this way to make easier the transition between python3 and python2. We will slowly phase out python2 support towards you are using python2 in your projects you should consider migrating it into python3.


This project exists thanks to all the people who contribute. [Contribute].


Thank you to all our backers! 🙏 [Become a backer]


Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]

You can’t perform that action at this time.