跳到主要内容

Android 应用程序包

介绍

Flet CLI 提供了flet build apkflet build aab命令,分别允许将 Flet 应用程序打包为 Android APK 和 Android App Bundle(AAB)。

先决条件

二进制 Python 包

二进制 Python 包(与仅用 Python 编写的“纯”Python 包相对)是部分用 C、Rust 或其他产生原生代码的语言编写的包。例如numpycryptographypydantic等包。

Flet 提供了一个替代索引 https://pypi.flet.dev,用于为 iOS 和 Android 平台托管 Python 二进制轮子文件(由 pip 下载的.whl文件)。

以下是目前适用于 Android 的包:

名称版本
aiohttp3.9.5
argon2-cffi-bindings21.2.0
bcrypt4.2.0
bitarray2.9.2
blis1.0.0
Brotli1.1.0
cffi1.17.1
contourpy1.3.0
cryptography43.0.1
google-crc321.6.0
grpcio1.67.1
kiwisolver1.4.7
lru-dict1.3.0
lxml5.3.0
MarkupSafe2.1.5
matplotlib3.9.2
numpy2.1.1
numpy1.26.4
opencv-python4.10.0.84
pandas2.2.2
pillow10.4.0
protobuf5.28.3
pydantic-core2.23.3
time-machine2.16.0
websockets13.0.1
yarl1.11.1
正在进行中

可以通过在Mobile Forge项目中创建一个配方来构建新的包。目前,Flet 团队正在为你编写这些配方,但当这个过程经过完善并完全自动化后,你将能够立即发送一个 PR 并测试编译后的包。

如果你在 https://pypi.flet.dev 上还没有看到一个包,你可以在Flet 讨论 - 包中请求它。请不要请求纯 Python 包。转到包的“下载文件”部分在 https://pypi.org,并确保它包含特定于平台的二进制轮子文件。

Android SDK

要为 Android 平台构建应用程序,flet build命令要求在你的机器上安装 Android SDK。

安装 Android SDK 和 Java 的官方方法是安装 Android Studio。

备注

在 macOS 上,Android SDK 将位于$HOME/Library/Android/sdk

flet build apk

从你的应用程序构建一个 Android APK 文件。这个命令构建发布版本。“发布”构建不支持调试,适合部署到应用商店。如果你要将应用程序部署到 Play Store,建议使用 Android App Bundles(AAB)或分割 APK 以减小 APK 大小。

构建特定于平台的 APK

默认情况下,Flet 构建“胖”APK,其中包括arm64-v8aarmeabi-v7a架构的二进制文件。你可以使用--split-per-abi选项或在pyproject.toml中设置split_per_abi来配置 Flet 将胖 APK 分割为每个平台的较小 APK:

[tool.flet.android]
split_per_abi = true

将 APK 安装到设备上

将 APK 安装到你的设备上的最简单方法是使用adb(Android Debug Bridge)工具。adb是 Android SDK 的一部分。例如,在 macOS 上,如果使用 Android Studio 安装了 Android SDK,adb工具的位置将在~/Library/Android/sdk/platform-tools/adb查看这篇文章以获取关于在各种平台上安装和使用adb工具的更多信息。 要将 APK 安装到设备上,请运行以下命令:

adb install <路径到你的.apk>

如果有多个设备连接到你的计算机(例如,模拟器和物理手机),你可以使用-s选项指定要在哪个设备上安装.apk

adb -s <设备> install <路径到你的.apk>

其中<设备>可以通过adb devices命令找到。

flet build aab

从你的应用程序构建一个 Android App Bundle(AAB)文件。这个命令构建发布版本。“发布”构建不支持调试,适合部署到应用商店。应用程序捆绑包是发布到 Play Store 的推荐方式,因为它可以改善你的应用程序大小。

为 Android 捆绑包签名

待定

[tool.flet.android.signing]
# 存储和密钥密码可以通过`--android-signing-key-store-password`
# 和`--android-signing-key-password`选项或
# FLET_ANDROID_SIGNING_KEY_STORE_PASSWORD
# 和 FLET_ANDROID_SIGNING_KEY_PASSWORD 环境变量传递。
key_store = "路径/到/store.jks" # --android-signing-key-store
key_alias = "upload"

启动画面

默认情况下,生成的 Android 应用程序将显示一个带有来自assets目录的图像(见下文)或 Flet 标志的启动画面。你可以使用--no-android-splash选项禁用 Android 应用程序的启动画面。 在pyproject.toml中配置启动画面:

[tool.flet.splash]
android = false

权限

配置要写入AndroidManifest.xml的 Android 权限和功能:

flet build --android-permissions permission=True|False... --android-features feature_name=True|False

例如:

flet build \
--android-permissions android.permission.READ_EXTERNAL_STORAGE=True \
android.permission.WRITE_EXTERNAL_STORAGE=True \
--android-features android.hardware.location.network=False

默认 Android 权限:

  • android.permission.INTERNET

可以使用--android-permissions选项和False值禁用默认权限,例如:

flet build --android-permissions android.permission.INTERNET=False

默认 Android 功能:

  • android.software.leanback=FalseFalse意味着在清单中写为android:required="false"
  • android.hardware.touchscreen=False

pyproject.toml中配置权限和功能(注意键名周围的引号"):

[tool.flet.android.permission]
# --android-permissions "android.permission.CAMERA" = true
"android.permission.CAMERA" = true
[tool.flet.android.feature]
# --android-features "android.hardware.camera" = false

元数据

配置要写入AndroidManifest.xml的 Android 应用程序元数据:

flet build --android-meta-data name_1=value_1 name_2=value_2...

默认 Android 元数据:

  • io.flutter.embedding.android.EnableImpeller=false

pyproject.toml中配置元数据(注意键名周围的引号"):

[tool.flet.android.meta_data]
"com.google.android.gms.ads.APPLICATION_ID" = "ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy"

深度链接

你可以使用以下flet build选项配置 Android 应用程序的深度链接设置:

  • --deep-linking-scheme - 为 Android 构建配置的深度链接 URL 方案,例如“https”或“myapp”。
  • --deep-linking-host - 深度链接 URL 主机。同样可以在pyproject.toml中配置:
[tool.flet.android.deep_linking]
scheme = "https"
host = "mydomain.com"

查看 Flutter 文档中的深度链接部分以获取更多信息和完整的设置指南。

Android 故障排除

要在模拟器或设备中运行交互式命令:

adb shell

要在尝试在交互式 Android 外壳中浏览文件系统时克服“权限被拒绝”错误:

su

要将文件从设备下载到你的本地计算机:

adb pull <设备路径> <本地路径>