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. 將 Python 新增到 Android 應用程式

大多數應用程式開發人員應使用以下工具之一,它們將提供更輕鬆的體驗:

如果您確定要手動完成所有這些操作,請繼續閱讀。您可以使用 testbed 應用程式作為指南;以下每個步驟都包含相關檔案的連結。

  • 首先,獲取適用於 Android 的 Python 構建版本

    • 最簡單的方法是從 python.org 下載 Android 版本。下面提到的 prefix 目錄位於包的頂層。

    • 或者,如果您想自己構建它,請按照 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 並在模擬器上測試的所有細節。