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

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

* BeeWare プロジェクトの Briefcase

* Kivy プロジェクトの Buildozer

* Chaquopy

* Flet

* pyqtdeploy

* Termux

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

* まず、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 のビルド、エミュレータでのテストまで、細か
な作業をすべて自動化します。
