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 を追加する

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

If you're sure you want to do all of this manually, read on. You can use the testbed app as a guide; each step below contains a link to the relevant file.

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

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

    • Or if you want to build it yourself, follow the instructions in Android/README.md. The prefix directory will be created under cross-build/HOST.

  • Add code to your build.gradle file to copy the following items into your project. All except your own Python code can be copied from prefix/lib:

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

      • libpython*.*.so

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

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

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

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

  • Add code to your app to extract the assets to the filesystem.

  • Add code to your app to start Python in embedded mode. This will need to be C code called via JNI.

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

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