6. Python unter Android verwenden
*********************************

Python unter Android unterscheidet sich von Python auf Desktop-
Plattformen. Auf einer Desktop-Plattform wird Python üblicherweise als
Systemressource installiert, die jeder Benutzer dieses Rechners
verwenden kann. Die Benutzer arbeiten dann mit Python, indem sie eine
ausführbare Datei **python** starten und Befehle an einer interaktiven
Eingabeaufforderung eingeben, oder indem sie ein Python-Skript
ausführen.

Unter Android gibt es kein Konzept der Installation als
Systemressource. Die einzige Verteilungseinheit für Software ist eine
„App“. Es gibt auch keine Konsole, auf der du eine ausführbare Datei
**python** starten oder mit einer Python-REPL arbeiten könntest.

Infolgedessen ist die einzige Möglichkeit, Python unter Android zu
verwenden, der eingebettete Modus — das heißt, du schreibst eine
native Android-Anwendung, bettest einen Python-Interpreter über
"libpython" ein und rufst Python-Code über die Python-Einbettungs-API
auf. Der vollständige Python-Interpreter, die Standardbibliothek und
dein ganzer Python-Code werden dann in deine App gepackt, zu ihrer
eigenen, privaten Verwendung.

Die Python-Standardbibliothek weist unter Android einige wesentliche
Auslassungen und Einschränkungen auf. Einzelheiten stehen im API-
Verfügbarkeitsleitfaden.


6.1. Python zu einer Android-App hinzufügen
===========================================

Die meisten App-Entwickler sollten eines der folgenden Werkzeuge
verwenden, das die Arbeit deutlich erleichtert:

* Briefcase, vom BeeWare-Projekt

* Buildozer, vom Kivy-Projekt

* Chaquopy

* pyqtdeploy

* Termux

Wenn du sicher bist, dass du das alles von Hand machen möchtest, lies
weiter. Die Testbed-App kann dir als Vorlage dienen. Jeder Schritt
unten verweist auf die zugehörige Datei.

* Besorge dir zuerst einen Python-Build für Android:

  * Am einfachsten lädst du eine Android-Veröffentlichung von
    python.org herunter. Das unten erwähnte Verzeichnis "prefix" liegt
    auf der obersten Ebene des Pakets.

  * Oder, wenn du ihn selbst bauen möchtest, folge der Anleitung unter
    Platforms/Android/README.md. Das Verzeichnis "prefix" wird dann
    unter "cross-build/*HOST*" angelegt.

* Füge Code in deine Datei build.gradle ein, der die folgenden Dinge
  in dein Projekt kopiert. Alles außer deinem eigenen Python-Code
  lässt sich aus "prefix/lib" kopieren:

  * In deine JNI-Bibliotheken:

    * "libpython*.*.so"

    * "lib*_python.so" (externe Bibliotheken wie OpenSSL)

  * In deine Assets:

    * "python*.*" (die Python-Standardbibliothek)

    * "python*.*/site-packages" (dein eigener Python-Code)

* Füge Code in deine App ein, der die Assets ins Dateisystem entpackt.

* Füge Code in deine App ein, der Python im eingebetteten Modus
  startet. Das muss C-Code sein, der über JNI aufgerufen wird.


6.2. Ein Python-Paket für Android bauen
=======================================

Python-Pakete lassen sich für Android als Wheels bauen und auf PyPI
veröffentlichen. Das empfohlene Werkzeug dafür ist cibuildwheel, das
alle Einzelheiten übernimmt: das Einrichten einer Umgebung zum Cross-
Kompilieren, das Bauen des Wheels und das Testen in einem Emulator.
