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*.*.solib*_python.so(外部函式庫,例如 OpenSSL)
在你的資產:
python*.*(Python 標準函式庫)python*.*/site-packages(你自己的 Python 程式碼)
在你的應用程式中加入程式碼,以 解壓縮資產到檔案系統。
在你的應用程式中加入程式碼,以 嵌入模式啟動 Python。這需要透過 JNI 呼叫的 C 語言程式碼。
6.2. 建置用於 Android 的 Python 套件¶
Python 套件可以為 Android 建置成 wheels 並發布到 PyPI。建議使用的工具是 cibuildwheel,它會自動設定交叉編譯環境、建置 wheel,以及在模擬器上測試等所有細節。