6. Python unter Android verwenden

Python unter Android unterscheidet sich von Python auf Desktop-Plattformen. Auf einer Desktop-Plattform wird Python im Allgemeinen als Systemressource installiert, die von jedem Benutzer dieses Computers verwendet werden kann. Benutzer interagieren dann mit Python, indem sie eine python-Executable ausführen und Befehle an einer interaktiven Eingabeaufforderung eingeben oder ein Python-Skript ausführen.

Unter Android gibt es kein Konzept der Installation als Systemressource. Die einzige Einheit der Softwareverteilung ist eine „App“. Es gibt auch keine Konsole, auf der Sie eine python-Executable ausführen oder mit einer Python REPL interagieren könnten.

Infolgedessen ist der einzige Weg, wie Sie Python unter Android verwenden können, im eingebetteten Modus – das heißt, indem Sie eine native Android-Anwendung schreiben, einen Python-Interpreter mit libpython einbetten und Python-Code über die Python-Embedding-API aufrufen. Der vollständige Python-Interpreter, die Standardbibliothek und Ihr gesamter Python-Code werden dann für die eigene private Nutzung in Ihre App gepackt.

Die Python-Standardbibliothek weist unter Android einige bemerkenswerte Auslassungen und Einschränkungen auf. Details finden Sie im Leitfaden zur API-Verfügbarkeit.

6.1. Python zu einer Android-App hinzufügen

Die meisten App-Entwickler sollten eines der folgenden Tools verwenden, die eine deutlich einfachere Erfahrung bieten.

Wenn Sie sicher sind, dass Sie all dies manuell tun möchten, lesen Sie weiter. Sie können die testbed app als Leitfaden verwenden; jeder Schritt unten enthält einen Link zur entsprechenden Datei.

  • Erwerben Sie zuerst eine Python-Build für Android

    • Der einfachste Weg ist, eine Android-Version von python.org herunterzuladen. Das unten erwähnte Verzeichnis prefix befindet sich auf der obersten Ebene des Pakets.

    • Oder wenn Sie es selbst bauen möchten, folgen Sie den Anweisungen in Android/README.md. Das Verzeichnis prefix wird unter cross-build/HOST erstellt.

  • Fügen Sie Code zu Ihrer build.gradle-Datei hinzu, um die folgenden Elemente in Ihr Projekt zu kopieren. Alle außer Ihrem eigenen Python-Code können aus prefix/lib kopiert werden.

    • In Ihren JNI-Bibliotheken

      • libpython*.*.so

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

    • In Ihren Assets

      • python*.* (die Python-Standardbibliothek)

      • python*.*/site-packages (Ihr eigener Python-Code)

  • Fügen Sie Code zu Ihrer App hinzu, um die Assets in das Dateisystem zu extrahieren.

  • Fügen Sie Code zu Ihrer App hinzu, um Python im eingebetteten Modus zu starten. Dies muss C-Code sein, der über JNI aufgerufen wird.

6.2. Erstellen eines Python-Pakets für Android

Python-Pakete können für Android als Wheels erstellt und auf PyPI veröffentlicht werden. Das empfohlene Werkzeug hierfür ist cibuildwheel, das alle Details der Einrichtung einer Cross-Compilierungs-Umgebung, des Erstellens des Wheels und des Testens auf einem Emulator automatisiert.