387 lines
18 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en" data-content_root="../">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta property="og:title" content="6. Using Python on Android" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://docs.python.org/3/using/android.html" />
<meta property="og:site_name" content="Python documentation" />
<meta property="og:description" content="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..." />
<meta property="og:image" content="https://docs.python.org/3/_static/og-image.png" />
<meta property="og:image:alt" content="Python documentation" />
<meta name="description" content="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..." />
<meta property="og:image:width" content="200">
<meta property="og:image:height" content="200">
<meta name="theme-color" content="#3776ab">
<title>6. Using Python on Android &#8212; Python 3.13.3 documentation</title><meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../_static/pydoctheme.css?v=23252803" />
<link id="pygments_dark_css" media="(prefers-color-scheme: dark)" rel="stylesheet" type="text/css" href="../_static/pygments_dark.css?v=5349f25f" />
<script src="../_static/documentation_options.js?v=5d57ca2d"></script>
<script src="../_static/doctools.js?v=9bcbadda"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../_static/sidebar.js"></script>
<link rel="search" type="application/opensearchdescription+xml"
title="Search within Python 3.13.3 documentation"
href="../_static/opensearch.xml"/>
<link rel="author" title="About these documents" href="../about.html" />
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="copyright" title="Copyright" href="../copyright.html" />
<link rel="next" title="7. Using Python on iOS" href="ios.html" />
<link rel="prev" title="5. Using Python on macOS" href="mac.html" />
<link rel="canonical" href="https://docs.python.org/3/using/android.html">
<style>
@media only screen {
table.full-width-table {
width: 100%;
}
}
</style>
<link rel="stylesheet" href="../_static/pydoctheme_dark.css" media="(prefers-color-scheme: dark)" id="pydoctheme_dark_css">
<link rel="shortcut icon" type="image/png" href="../_static/py.svg" />
<script type="text/javascript" src="../_static/copybutton.js"></script>
<script type="text/javascript" src="../_static/menu.js"></script>
<script type="text/javascript" src="../_static/search-focus.js"></script>
<script type="text/javascript" src="../_static/themetoggle.js"></script>
<script type="text/javascript" src="../_static/rtd_switcher.js"></script>
<meta name="readthedocs-addons-api-version" content="1">
</head>
<body>
<div class="mobile-nav">
<input type="checkbox" id="menuToggler" class="toggler__input" aria-controls="navigation"
aria-pressed="false" aria-expanded="false" role="button" aria-label="Menu" />
<nav class="nav-content" role="navigation">
<label for="menuToggler" class="toggler__label">
<span></span>
</label>
<span class="nav-items-wrapper">
<a href="https://www.python.org/" class="nav-logo">
<img src="../_static/py.svg" alt="Python logo"/>
</a>
<span class="version_switcher_placeholder"></span>
<form role="search" class="search" action="../search.html" method="get">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" class="search-icon">
<path fill-rule="nonzero" fill="currentColor" d="M15.5 14h-.79l-.28-.27a6.5 6.5 0 001.48-5.34c-.47-2.78-2.79-5-5.59-5.34a6.505 6.505 0 00-7.27 7.27c.34 2.8 2.56 5.12 5.34 5.59a6.5 6.5 0 005.34-1.48l.27.28v.79l4.25 4.25c.41.41 1.08.41 1.49 0 .41-.41.41-1.08 0-1.49L15.5 14zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"></path>
</svg>
<input placeholder="Quick search" aria-label="Quick search" type="search" name="q" />
<input type="submit" value="Go"/>
</form>
</span>
</nav>
<div class="menu-wrapper">
<nav class="menu" role="navigation" aria-label="main navigation">
<div class="language_switcher_placeholder"></div>
<label class="theme-selector-label">
Theme
<select class="theme-selector" oninput="activateTheme(this.value)">
<option value="auto" selected>Auto</option>
<option value="light">Light</option>
<option value="dark">Dark</option>
</select>
</label>
<div>
<h3><a href="../contents.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">6. Using Python on Android</a><ul>
<li><a class="reference internal" href="#adding-python-to-an-android-app">6.1. Adding Python to an Android app</a></li>
</ul>
</li>
</ul>
</div>
<div>
<h4>Previous topic</h4>
<p class="topless"><a href="mac.html"
title="previous chapter"><span class="section-number">5. </span>Using Python on macOS</a></p>
</div>
<div>
<h4>Next topic</h4>
<p class="topless"><a href="ios.html"
title="next chapter"><span class="section-number">7. </span>Using Python on iOS</a></p>
</div>
<div role="note" aria-label="source link">
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="../bugs.html">Report a Bug</a></li>
<li>
<a href="https://github.com/python/cpython/blob/main/Doc/using/android.rst"
rel="nofollow">Show Source
</a>
</li>
</ul>
</div>
</nav>
</div>
</div>
<div class="related" role="navigation" aria-label="Related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="ios.html" title="7. Using Python on iOS"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="mac.html" title="5. Using Python on macOS"
accesskey="P">previous</a> |</li>
<li><img src="../_static/py.svg" alt="Python logo" style="vertical-align: middle; margin-top: -1px"/></li>
<li><a href="https://www.python.org/">Python</a> &#187;</li>
<li class="switchers">
<div class="language_switcher_placeholder"></div>
<div class="version_switcher_placeholder"></div>
</li>
<li>
</li>
<li id="cpython-language-and-version">
<a href="../index.html">3.13.3 Documentation</a> &#187;
</li>
<li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Python Setup and Usage</a> &#187;</li>
<li class="nav-item nav-item-this"><a href=""><span class="section-number">6. </span>Using Python on Android</a></li>
<li class="right">
<div class="inline-search" role="search">
<form class="inline-search" action="../search.html" method="get">
<input placeholder="Quick search" aria-label="Quick search" type="search" name="q" id="search-box" />
<input type="submit" value="Go" />
</form>
</div>
|
</li>
<li class="right">
<label class="theme-selector-label">
Theme
<select class="theme-selector" oninput="activateTheme(this.value)">
<option value="auto" selected>Auto</option>
<option value="light">Light</option>
<option value="dark">Dark</option>
</select>
</label> |</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="using-python-on-android">
<span id="using-android"></span><h1><span class="section-number">6. </span>Using Python on Android<a class="headerlink" href="#using-python-on-android" title="Link to this heading"></a></h1>
<p>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 <strong class="program">python</strong>
executable and entering commands at an interactive prompt, or by running a
Python script.</p>
<p>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 <strong class="program">python</strong> executable, or interact with a Python REPL.</p>
<p>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 <code class="docutils literal notranslate"><span class="pre">libpython</span></code>, and invoking Python code using the <a class="reference internal" href="../extending/embedding.html#embedding"><span class="std std-ref">Python embedding
API</span></a>. The full Python interpreter, the standard library, and all
your Python code is then packaged into your app for its own private use.</p>
<p>The Python standard library has some notable omissions and restrictions on
Android. See the <a class="reference internal" href="../library/intro.html#mobile-availability"><span class="std std-ref">API availability guide</span></a> for
details.</p>
<section id="adding-python-to-an-android-app">
<h2><span class="section-number">6.1. </span>Adding Python to an Android app<a class="headerlink" href="#adding-python-to-an-android-app" title="Link to this heading"></a></h2>
<p>Most app developers should use one of the following tools, which will provide a
much easier experience:</p>
<ul class="simple">
<li><p><a class="reference external" href="https://briefcase.readthedocs.io">Briefcase</a>, from the BeeWare project</p></li>
<li><p><a class="reference external" href="https://buildozer.readthedocs.io">Buildozer</a>, from the Kivy project</p></li>
<li><p><a class="reference external" href="https://chaquo.com/chaquopy">Chaquopy</a></p></li>
<li><p><a class="reference external" href="https://www.riverbankcomputing.com/static/Docs/pyqtdeploy/">pyqtdeploy</a></p></li>
<li><p><a class="reference external" href="https://termux.dev/en/">Termux</a></p></li>
</ul>
<p>If youre sure you want to do all of this manually, read on. You can use the
<a class="extlink-source reference external" href="https://github.com/python/cpython/tree/3.13/Android/testbed">testbed app</a> as a guide; each step below contains a
link to the relevant file.</p>
<ul class="simple">
<li><p>Build Python by following the instructions in <a class="extlink-source reference external" href="https://github.com/python/cpython/tree/3.13/Android/README.md">Android/README.md</a>.
This will create the directory <code class="docutils literal notranslate"><span class="pre">cross-build/HOST/prefix</span></code>.</p></li>
<li><p>Add code to your <a class="extlink-source reference external" href="https://github.com/python/cpython/tree/3.13/Android/testbed/app/build.gradle.kts">build.gradle</a>
file to copy the following items into your project. All except your own Python
code can be copied from <code class="docutils literal notranslate"><span class="pre">prefix/lib</span></code>:</p>
<ul>
<li><p>In your JNI libraries:</p>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">libpython*.*.so</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">lib*_python.so</span></code> (external libraries such as OpenSSL)</p></li>
</ul>
</li>
<li><p>In your assets:</p>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">python*.*</span></code> (the Python standard library)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">python*.*/site-packages</span></code> (your own Python code)</p></li>
</ul>
</li>
</ul>
</li>
<li><p>Add code to your app to <a class="extlink-source reference external" href="https://github.com/python/cpython/tree/3.13/Android/testbed/app/src/main/java/org/python/testbed/MainActivity.kt">extract the assets to the filesystem</a>.</p></li>
<li><p>Add code to your app to <a class="extlink-source reference external" href="https://github.com/python/cpython/tree/3.13/Android/testbed/app/src/main/c/main_activity.c">start Python in embedded mode</a>. This will need to be C code
called via JNI.</p></li>
</ul>
</section>
</section>
<div class="clearer"></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="Main">
<div class="sphinxsidebarwrapper">
<div>
<h3><a href="../contents.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">6. Using Python on Android</a><ul>
<li><a class="reference internal" href="#adding-python-to-an-android-app">6.1. Adding Python to an Android app</a></li>
</ul>
</li>
</ul>
</div>
<div>
<h4>Previous topic</h4>
<p class="topless"><a href="mac.html"
title="previous chapter"><span class="section-number">5. </span>Using Python on macOS</a></p>
</div>
<div>
<h4>Next topic</h4>
<p class="topless"><a href="ios.html"
title="next chapter"><span class="section-number">7. </span>Using Python on iOS</a></p>
</div>
<div role="note" aria-label="source link">
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="../bugs.html">Report a Bug</a></li>
<li>
<a href="https://github.com/python/cpython/blob/main/Doc/using/android.rst"
rel="nofollow">Show Source
</a>
</li>
</ul>
</div>
</div>
<div id="sidebarbutton" title="Collapse sidebar">
<span>«</span>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="Related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="ios.html" title="7. Using Python on iOS"
>next</a> |</li>
<li class="right" >
<a href="mac.html" title="5. Using Python on macOS"
>previous</a> |</li>
<li><img src="../_static/py.svg" alt="Python logo" style="vertical-align: middle; margin-top: -1px"/></li>
<li><a href="https://www.python.org/">Python</a> &#187;</li>
<li class="switchers">
<div class="language_switcher_placeholder"></div>
<div class="version_switcher_placeholder"></div>
</li>
<li>
</li>
<li id="cpython-language-and-version">
<a href="../index.html">3.13.3 Documentation</a> &#187;
</li>
<li class="nav-item nav-item-1"><a href="index.html" >Python Setup and Usage</a> &#187;</li>
<li class="nav-item nav-item-this"><a href=""><span class="section-number">6. </span>Using Python on Android</a></li>
<li class="right">
<div class="inline-search" role="search">
<form class="inline-search" action="../search.html" method="get">
<input placeholder="Quick search" aria-label="Quick search" type="search" name="q" id="search-box" />
<input type="submit" value="Go" />
</form>
</div>
|
</li>
<li class="right">
<label class="theme-selector-label">
Theme
<select class="theme-selector" oninput="activateTheme(this.value)">
<option value="auto" selected>Auto</option>
<option value="light">Light</option>
<option value="dark">Dark</option>
</select>
</label> |</li>
</ul>
</div>
<div class="footer">
&copy;
<a href="../copyright.html">
Copyright
</a>
2001-2025, Python Software Foundation.
<br />
This page is licensed under the Python Software Foundation License Version 2.
<br />
Examples, recipes, and other code in the documentation are additionally licensed under the Zero Clause BSD License.
<br />
See <a href="/license.html">History and License</a> for more information.<br />
<br />
The Python Software Foundation is a non-profit corporation.
<a href="https://www.python.org/psf/donations/">Please donate.</a>
<br />
<br />
Last updated on Apr 08, 2025 (14:33 UTC).
<a href="/bugs.html">Found a bug</a>?
<br />
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 8.2.3.
</div>
</body>
</html>