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
构建应用程序通过运行 flet build apk
命令以生成 .apk
文件。
现在,您的应用程序包包括自定义 Python 库。
flet build apk
从您的应用程序生成 Android APK 文件。
此命令构建 release 版本。'release' 版本不支持调试,适合部署到应用程序商店。如果您将应用程序部署到 Play Store,建议使用 Android 应用程序包(AAB)或将 APK 分割以减少 APK 大小。
- https://developer.android.com/guide/app-bundle
- https://developer.android.com/studio/build/configure-apk-splits#configure-abi-split
启动屏幕
默认情况下,生成的 Android 应用程序将显示启动屏幕,使用来自 assets
目录(见下)的图像或 Flet 标志。您可以使用 --no-android-splash
选项禁用 Android 应用程序的启动屏幕。
安装 APK 到设备
将 APK 安装到设备的最简单方法是使用 adb
(Android 调试桥)工具。
adb
是 Android SDK 的一部分。例如,在 macOS 上,如果使用 Android Studio 安装了 Android SDK,那么 adb
工具的位置将在 ~/Library/Android/sdk/platform-tools/adb
。
查看这篇文章,以获取更多关于安装和使用 adb
工具的信息。
要安装 APK 到设备,请运行以下命令:
adb install <path-to-your.apk>
如果多个设备连接到您的计算机(例如,模拟器和物理手机),您可以使用 -s
选项指定要安装 .apk
的设备:
adb -s <device> install <path-to-your.apk>
其中 <device>
可以使用 adb devices
命令找到。
构建特定平台的 APK
默认情况下,Flet 构建“胖”APK,其中包括 arm64-v8a
和 armeabi-v7a
架构的二进制文件。
如果您了解/控制您的应用将分发到的 Android 设备,则可以为特定架构构建较小的 APK。
要为 arm64-v8a
构建 APK:
flet build apk --flutter-build-args=--target-platform --flutter-build-args=android-arm64
要为 armeabi-v7a
构建 APK:
flet build apk --flutter-build-args=--target-platform --flutter-build-args=android-arm
Android 故障排除
要在模拟器或设备内运行交互式命令:
adb shell
要克服在交互式 Android 外壳中尝试浏览文件系统时的“权限被拒绝”错误:
su
要将设备中的文件下载到本地计算机:
adb pull <设备路径> <本地路径>
flet build aab
从您的应用程序生成 Android 应用程序包(AAB)文件。
此命令构建 release 版本。'release' 版本不支持调试,适合部署到应用程序商店。应用程序包是发布到 Play Store 的推荐方式,因为它可以改善应用程序的大小。
启动屏幕
默认情况下,生成的 Android 应用程序将显示启动屏幕,使用来自 assets
目录(见下)的图像或 Flet 标志。您可以使用 --no-android-splash
选项禁用 Android 应用程序的启动屏幕。