pyside6-android-deploy:Qt for Python的Android部署工具#

pyside6-android-deploy 是一个易于使用的工具,可以用于将 PySide6 应用程序部署到不同的 Android 架构,即 arm64-v8a, x86_64, x86 和 armeabi-v7a。此工具与 pyside6-deploy 工具类似,并使用相同的配置文件 pysidedeploy.spec,如同 pyside6-deploy 设置部署过程。使用命令行或从 pysidedeploy.spec 获取的部署配置选项,pyside6-android-deploy 会配置部署过程并调用 buildozer,这是一个用于将 Python 应用程序打包到 Android 的工具。

最终输出是在项目的源目录中创建的 .apk.aab 文件。在 pysidedeploy.spec 中的 buildozer 键下指定的 mode 选项确定是创建 .apk 还是 .aab

警告

目前,用户需要跨编译 Qt for Python 以生成本地 Android 目标架构所需的 wheel 文件。此要求会在 Qt for Python官方Android wheel(正在进行中)发布后消失。由于此要求,pyside6-android-deploy 将被视为 技术预览。Android 平台交叉编译 Qt for Python 的说明可以在此处找到 here

注意

目前,pyside6-android-deploy 仅在 Linux 主机上进行操作。这种限制也是因为 Qt for Python 的 Android 平台交叉编译目前仅在 Linux 系统上工作。

如何使用它?#

pyside6-deploy 类似,您可以通过两种不同的方式使用 pyside6-android-deploy 部署您的 PySide6 应用程序。唯一的区别是,为了使用 pyside6-android-deploy,主 Python 入口点文件应命名为 main.py

pysidedeploy.spec#

类似于 pyside6-deploy,您可以使用 pysidedeploy.spec 文件来控制部署过程的各个参数。该文件包含多个部分,每个部分包含多个键(被控制的参数)并分配给一个值。这种文件的优势详见此处。同时使用相同的 pysidedeploy.spec 文件控制 pyside6-deploypyside6-android-deploy 的好处是您可以有一个单一文件来控制所有平台的部署。

pyside6-android-deploy 相关的参数有

app
  • title:应用程序的名称。

  • project_dir:项目目录。通常假设项目目录是主 Python 入口点文件的父目录。

  • input_file:主 Python 入口点文件路径。对于 pyside6-android-deploy,此文件应命名为 main.py

  • project_file:如果存在,则指向 Qt Creator Python 项目文件 .pyproject 的路径。在项目目录中的此类文件可确保打包可执行文件时不会考虑不必要文件。

  • exec_directory:生成最终可执行文件的目录。

python
  • python_path:Python 可执行文件路径。建议在虚拟环境中运行 pyside6-android-deploy,因为某些 Python 包将被安装到 Python 环境中。但是,请注意将创建的虚拟环境放在项目目录之外,以免 pyside6-android-deploy 尝试将其也打包。

  • android_packages:为部署工作而安装到 Python 环境中的 Python 包。默认安装 buildozer 和 cpython 两个 Python 包。

qt
  • modules:逗号分隔的应用程序所使用的所有 Qt 模块列表。与 pysidedeploy.spec 中的其他配置选项一样,此选项也由 pyside6-android-deploy 自动计算。但是,如果您想显式包含某些 Qt 模块,则可以将模块名称添加到列表中,无需添加 Qt 前缀。例如,使用 Network 而不是 QtNetwork。

  • plugins:此字段对 pyside6-android-deploy 不相关,且仅适用于 pyside6-deploy。与 pyside6-android-deploy 相关的插件通过 android 键下的 plugins 选项指定。

android
  • wheel_pyside:指定特定目标架构的 PySide6 Android 轮路径。

  • wheel_pyside:指定针对特定目标架构的Shiboken6 Android轮的路径。

  • plugins:以逗号分隔的列表,列出了应用程序使用的所有Qt插件。就像pysidedeploy.spec中的其他配置选项一样,这个选项也是由pyside6-android-deploy自动计算的。然而,如果您想显式包含某些Qt插件,可以将插件名称附加到该列表中。要查看与PySide6捆绑的所有插件,请查看PySide6已安装的Python中的site-packages目录下的plugins文件夹。插件名称对应于它们的文件夹名称。此字段可能与qt键下的plugins选项混淆。在未来,它们将被合并为一个单独的选项。

buildozer
  • mode:指定两种模式之一 - release(发布)和debug(调试),以运行buildozer。发布模式创建aab,而调试模式创建apk。默认模式是debug

  • recipe_dir:指定包含python-for-android配方文件的目录的路径。此选项在部署过程中由pyside6-android-deploy自动计算。如果没有使用pyside6-android-deploy–keep-deployment-files选项,则recipe_dir将指向一个临时目录,该目录在创建最终的Android应用程序包后被删除。

  • jars_dir:指定用于创建Android应用程序包的相关Qt Android .jar文件的路径。此选项在部署过程中由pyside6-android-deploy自动计算。就像recipe_dir一样,此字段在未用于与pyside6-android-deploy–keep-deployment-files选项结合使用时也不相关。

  • ndk_path:指定用于打包应用程序的Android NDK路径。

  • sdk_path:指定用于打包应用程序的Android SDK路径。

  • local_libs:指定Android运行时在启动时加载的非Qt插件或与Android目标兼容的其他库。

  • sdk_path:指定用于打包应用程序的Android SDK路径。

  • arch:指定目标架构的指令集。此选项可以取以下四个值之一 - aarch64、armv7a、i686、x86_64

命令行选项#

以下是pyside6-android-deploy的所有命令行选项。

  • -c/–config-file:此选项用于显式指定pysidedeploy.spec文件的路径。

  • –init:用于仅创建pysidedeploy.spec文件。用法:

    pyside6-android-deploy --init
    
  • -v/–verbose: 以详细模式运行 pyside6-android-deploy

  • –dry-run: 显示用于生成 Android 应用程序包的命令。

  • –keep-deployment-files: 当添加此选项时,在部署过程中保持由 buildozer 创建的构建文件夹。这包括存储 python-for-android 食谱、相关的 .jar 文件以及应用程序的 Android Gradle 项目的文件夹。

  • -f/–force: 当使用此选项时,假设所有提示均为 yes 并以非交互式方式运行 pyside6-android-deploy。如果不在虚拟环境中,pyside6-android-deploy 会提示用户创建 Python 虚拟环境。使用此选项,无论当前 Python 环境是否为虚拟环境,都使用当前 Python 环境。

  • –name: 应用程序名称。

  • –wheel-pyside: 特定目标架构的 PySide6 Android 轮子的路径。

  • –wheel-shiboken: 特定目标架构的 Shiboken6 Android 轮子的路径。

  • –ndk-path: 用于打包应用程序的 Android NDK 的路径。

  • –sdk-path: 用于打包应用程序的 Android SDK 的路径。

  • –extra-ignore-dirs: 在项目目录内以逗号分隔的目录名称。搜索与项目相关的 Python 文件时,会跳过这些目录。

  • –extra-modules: 要添加到应用程序中的 Qt 模块的逗号分隔列表,以防它们未自动找到。模块名称可以是省略 Qt 前缀或包含它,例如:Network 和 QtNetwork 都可以工作。

为 Android Python 轮子交叉编译 Qt#

对特定 Android 目标架构的 Qt For Python 轮子的交叉编译只需要针对每个 Qt 版本进行一次,无论部署的应用程序数量有多少。目前,仅限于 Linux 主机执行为 Python Android 轮子交叉编译 Qt。

  1. 下载 并安装您要为其创建 Qt For Python 轮子的 Qt 版本。

  2. 克隆 Qt For Python 仓库

    git clone https://code.qt.io/pyside/pyside-setup
    
  3. 检出您想要的版本,例如 6.7。检出的版本必须与 Step 1 中下载的 Qt 版本相对应。

    cd pyside-setup && git checkout 6.7
    
  4. 安装依赖项

    pip install -r requirements.txt
    pip install -r tools/cross_compile_android/requirements.txt
    
  5. 运行交叉编译 Python 脚本。

    python tools/cross_compile_android/main.py --plat-name=aarch64 --qt-install-path=/opt/Qt/6.7.0
    --auto-accept-license --skip-update
    

    –qt-install-path 指的是 Qt 6.7.0 安装的路径。如果尚未通过命令行选项指定或在 pyside6-android-deploy 缓存中存在,则需要 –auto-accept-license–skip-update 以下载和安装 Android NDK 和 SDK。使用 –help 查看所有其他可用选项

    python tools/cross_compile_android/main.py --help