mirror of https://github.com/python/cpython
66 lines
2.8 KiB
ReStructuredText
66 lines
2.8 KiB
ReStructuredText
|
.. _using-android:
|
|||
|
|
|||
|
=======================
|
|||
|
Using Python on Android
|
|||
|
=======================
|
|||
|
|
|||
|
Python on Android is unlike Python on desktop platforms. On a desktop platform,
|
|||
|
Python is generally installed as a system resource that can be used by any user
|
|||
|
of that computer. Users then interact with Python by running a :program:`python`
|
|||
|
executable and entering commands at an interactive prompt, or by running a
|
|||
|
Python script.
|
|||
|
|
|||
|
On Android, there is no concept of installing as a system resource. The only unit
|
|||
|
of software distribution is an "app". There is also no console where you could
|
|||
|
run a :program:`python` executable, or interact with a Python REPL.
|
|||
|
|
|||
|
As a result, the only way you can use Python on Android is in embedded mode – that
|
|||
|
is, by writing a native Android application, embedding a Python interpreter
|
|||
|
using ``libpython``, and invoking Python code using the :ref:`Python embedding
|
|||
|
API <embedding>`. The full Python interpreter, the standard library, and all
|
|||
|
your Python code is then packaged into your app for its own private use.
|
|||
|
|
|||
|
The Python standard library has some notable omissions and restrictions on
|
|||
|
Android. See the :ref:`API availability guide <mobile-availability>` for
|
|||
|
details.
|
|||
|
|
|||
|
Adding Python to an Android app
|
|||
|
-------------------------------
|
|||
|
|
|||
|
These instructions are only needed if you're planning to compile Python for
|
|||
|
Android yourself. Most users should *not* need to do this. Instead, use one of
|
|||
|
the following tools, which will provide a much easier experience:
|
|||
|
|
|||
|
* `Briefcase <https://briefcase.readthedocs.io>`__, from the BeeWare project
|
|||
|
* `Buildozer <https://buildozer.readthedocs.io>`__, from the Kivy project
|
|||
|
* `Chaquopy <https://chaquo.com/chaquopy>`__
|
|||
|
* `pyqtdeploy <https://www.riverbankcomputing.com/static/Docs/pyqtdeploy/>`__
|
|||
|
* `Termux <https://termux.dev/en/>`__
|
|||
|
|
|||
|
If you're sure you want to do all of this manually, read on. You can use the
|
|||
|
:source:`testbed app <Android/testbed>` as a guide; each step below contains a
|
|||
|
link to the relevant file.
|
|||
|
|
|||
|
* Build Python by following the instructions in :source:`Android/README.md`.
|
|||
|
|
|||
|
* Add code to your :source:`build.gradle <Android/testbed/app/build.gradle.kts>`
|
|||
|
file to copy the following items into your project. All except your own Python
|
|||
|
code can be copied from ``cross-build/HOST/prefix/lib``:
|
|||
|
|
|||
|
* In your JNI libraries:
|
|||
|
|
|||
|
* ``libpython*.*.so``
|
|||
|
* ``lib*_python.so`` (external libraries such as OpenSSL)
|
|||
|
|
|||
|
* In your assets:
|
|||
|
|
|||
|
* ``python*.*`` (the Python standard library)
|
|||
|
* ``python*.*/site-packages`` (your own Python code)
|
|||
|
|
|||
|
* Add code to your app to :source:`extract the assets to the filesystem
|
|||
|
<Android/testbed/app/src/main/java/org/python/testbed/MainActivity.kt>`.
|
|||
|
|
|||
|
* Add code to your app to :source:`start Python in embedded mode
|
|||
|
<Android/testbed/app/src/main/c/main_activity.c>`. This will need to be C code
|
|||
|
called via JNI.
|