6. 在 Android 上使用 Python

Android 上的 Python 與桌面版的 Python 不同。在桌面版上,Python 通常作為系統資源安裝,供該台電腦上的任何使用者使用。使用者通常透過執行 python 可執行檔並在互動式提示字元中輸入指令,或是直接執行 Python 腳本與 Python 互動。

在 Android 上,沒有將其安裝為系統資源的概念。唯一的軟體單位是 "app"。也沒有可以執行 python 可執行檔的控制台,或與 Python REPL 互動。

因此,在 Android 上使用 Python 的唯一方式就是以嵌入模式運作 - 也就是撰寫一個原生的 Android 應用程式,使用 libpython 嵌入 Python 直譯器,並透過 Python 嵌入式 API 呼叫 Python 程式碼。完整的 Python 直譯器、標準函式庫,以及你所有的 Python 程式碼,都會被打包進你的應用程式,供該應用程式使用。

Python 的標準函式庫在 Android 上有一些明顯的缺漏與限制。詳情請參考 API 可用性指南

6.1. 將 Python 加入 Android 應用程式

大多數的應用程式開發者應該使用下面其中一種工具,這些工具能提供更輕鬆的使用體驗:

如果你確定要全部手動操作,請繼續閱讀。你可以將 testbed app 作為參考;下面的每個步驟都包含相關檔案的連結。

  • 首先,取得一個用於 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 建置成 wheels 並發布到 PyPI。建議使用的工具是 cibuildwheel,它會自動設定交叉編譯環境、建置 wheel,以及在模擬器上測試等所有細節。