6. Android で Python を使う

Android における Pythonは、デスクトッププラットフォームにおける Python とは異なります。 デスクトッププラットフォームでは、 Python は一般的にコンピューターのどのユーザーでも使えるシステムリソースとしてインストールされます。そして、ユーザーは python 実行可能ファイルを実行して対話型プロンプトにコマンドを入力したり、 Python スクリプトを実行したりして、 Python を使用することができるのです。

Android においては、システムリソースとしてのインストールという概念はありません。ソフトウェア配布が可能なのは、 "アプリ" だけです。また、 python 実行可能ファイルの実行したり、 Python の REPL を使用したりする、コンソールも存在しません。

このため、Android で Python を使うには埋め込みモードを使用するしかありません。 つまり、ネイティブの Android アプリケーションを作成し、libpython を使って Python インタープリタを埋め込み、Python 埋め込み API を使って Python コードを呼び出します。 Python インタープリタ全体、標準ライブラリ、作成したすべての Python コードは、そのアプリ専用としてアプリにまとめてパッケージ化されます。

Python の 標準ライブラリには、 Android におけるいくつかの重要な省略や制限があります。詳細は API 利用可能性ガイド を参照してください。

6.1. Android アプリに Python を追加する

ほとんどのアプリ開発者は、次のツールの一つを使用するべきです。これにより、はるかに簡単な体験が提供されます:

これらの作業をすべて手動で行うと決めている場合は、続きを読んでください。 テストベッドアプリ を参考にできます。 以下の各手順には、対応するファイルへのリンクがあります。

  • まず、Android 用にビルドされた Python を入手します:

    • 最も簡単な方法は、python.org から Android 向けリリースをダウンロードすることです。 以下で説明する prefix ディレクトリは、パッケージの最上位にあります。

    • 自分でビルドする場合は、Platforms/Android/README.md の手順に従ってください。 prefix ディレクトリは cross-build/HOST の下に作成されます。

  • build.gradle ファイルにコードを追加し、次の項目をプロジェクト内にコピーします。 自分で作成した Python コード以外は、すべて prefix/lib からコピーできます:

    • JNI ライブラリにコピーするもの:

      • libpython*.*.so

      • lib*_python.so (OpenSSL などの外部ライブラリ)

    • アセットにコピーするもの:

      • python*.* (Python 標準ライブラリ)

      • python*.*/site-packages (自分で作成した Python コード)

  • アプリにコードを追加し、アセットをファイルシステムに展開 します。

  • アプリにコードを追加し、Python を埋め込みモードで起動 します。 このコードは JNI 経由で呼び出す C コードでなければなりません。

6.2. Android 向けの Python パッケージをビルドする

Python パッケージは Android 向けの wheel としてビルドし、PyPI で公開できます。 この作業には cibuildwheel を使うことを推奨します。 クロスコンパイル環境の準備から wheel のビルド、エミュレータでのテストまで、細かな作業をすべて自動化します。