Android 应用程序包
简介
Flet CLI 提供了 flet build apk
和 flet build aab
命令,允许将 Flet 应用程序打包成 Android APK 和 Android 应用程序包(AAB)文件。
前提条件
本机 Python 包
本机 Python 包(与“纯”Python 包不同,后者仅用 Python 编写)是部分用 C、Rust 或其他语言编写的包,生成本机代码。示例包包括 numpy
、cryptography
、lxml
和 pydantic
。
当使用 flet build
命令将 Flet 应用程序打包到 Android 时,这些包无法从 PyPI 安装,因为没有 Android 平台的轮子(.whl
)。
因此,在运行 flet build
命令之前,您需要在计算机上编译本机包 для Android。
我们正在积极地自动化下面描述的过程 - 这是我们的待办事项清单中的第 1 项。
Flet 使用 Kivy for Android 将 Python 和本机 Python 包构建到 Android。
要使用 flet build
命令构建自定义 Python 发行版,您需要使用 Kivy for Android 提供的 p4a
工具。
p4a
命令行工具可以在 macOS 和 Linux(Windows 的 WSL)上运行。
要获取 Android SDK,请安装 Android Studio。
在 macOS 上,Android SDK 将位于 $HOME/Library/Android/sdk
。
安装 Temurin8,以获取 JRE 1.8,required by sdkmanager
工具:
brew install --cask temurin8
export JAVA_HOME=/Library/Java/JavaVirtualMachines/temurin-8.jdk/Contents/Home
设置以下环境变量:
export ANDROID_SDK_ROOT="$HOME/Library/Android/sdk"
export NDK_VERSION=25.2.9519653
export SDK_VERSION=android-33
将 sdkmanager
的路径添加到 PATH
:
export PATH=$ANDROID_SDK_ROOT/tools/bin:$PATH
从 https://developer.android.com/ndk/downloads/ 或使用 Android SDK Manager 安装 Android SDK 和 NDK:
echo "y" | sdkmanager --install "ndk;$NDK_VERSION" --channel=3
echo "y" | sdkmanager --install "platforms;$SDK_VERSION"
创建新的 Python 虚拟环境:
python3 -m venv.venv
source.venv/bin/activate
从 Flet 的 fork 安装 p4a
- 它固定了 Python 3.11.6,兼容 flet build
生成的其他代码:
pip3 install git+https://github.com/flet-dev/python-for-android.git@3.11.6
安装 cython
:
pip install --upgrade cython
使用 --requirements
选项,包括您的自定义 Python 库,分隔以逗号,例如 numpy
,在以下示例中:
p4a create --requirements numpy --arch arm64-v8a --arch armeabi-v7a --arch x86_64 --sdk-dir $ANDROID_SDK_ROOT --ndk-dir $ANDROID_SDK_ROOT/ndk/$NDK_VERSION --dist-name mydist
选择“No”以回答“Do you want automatically install prerequisite JDK? [y/N]”。
注意: 您想要使用 p4a
命令构建的库应该在 这个文件夹 中有一个 recipe。如果您需要的库没有 recipe,可以 提交请求 或创建自己的 recipe 并提交 PR。
当 p4a
命令完成时,Python 发行版将位于:
$HOME/.python-for-android/dists/mydist
在运行 flet build apk
命令以构建 Flet Android 应用程序的终端中,运行以下命令以将发行版的完整路径存储在 SERIOUS_PYTHON_P4A_DIST
环境变量中:
export SERIOUS_PYTHON_P4A_DIST=$HOME/.python-for-android/dists/mydist