如何通过 Docker 使用 Buildozer 构建 .aab?

How to build an .aab using Buildozer via Docker?

我刚刚看到 support for AAB files have just been introduced in Python for Android (p4a). Considering that, fom August 2021, new apps are required to publish with the Android App Bundle on Google Play,这对于任何 Python 开发 Android 应用程序的开发人员来说都是至关重要的补充。

由于我目前正在使用 Buildozer via Docker,我想知道生成 .aab 而不是(或沿用)传统 .apk 的步骤是什么

为了清楚起见,这里是我从容器内部使用 运行 Buildozer(对 Windows 使用 Docker)来制作 .apk 文件:

docker run --interactive --tty --rm --volume "<full_path_to_project_dir>":/home/user/hostcwd kivy/buildozer -v android debug 

我看到有一个临时的 workaround,但它涉及使用 Android Studio,我不使用并且希望避免使用。此外,它指的是虚拟机用户,但我不确定这是否也适用于 Docker 用户。

社区终于完成了AAB support for Buildozer。虽然它仍然是一个待处理的拉取请求,但已经可以创建 AAB,而且我已经找到使用 Docker.

的方法

我发现了两个非常有趣的要点,对我帮助很大(这个关于 creating an AAB with Buildozer on Ubuntu, and another one about signing an AAB 在同一平台上)。但是,我通过 Docker 在 Windows 上拥有 运行 所有内容,所以我认为分享我是如何做到的是个好主意。

  1. 在您的本地机器上克隆 feat/aab-support branch of the Buildozer repository

    git clone --single-branch --branch feat/aab-support https://github.com/misl6/buildozer.git
    
  2. 移动到您刚刚克隆的项目的根文件夹中,并构建容器:

    cd buildozer
    docker build -t buildozer-aab .
    
  3. 在使用Buildozer实际构建AAB之前,我们需要生成一个新的buildozer.spec文件,因为有新的字段需要包含在构建 AAB 中。为此,请移至应用程序项目的根文件夹,删除或重命名任何旧的 buildozer.spec 文件,然后 运行 以下命令:

    docker run --interactive --tty --rm --volume "<full_path_to_app_project_dir>":/home/user/hostcwd kivy/buildozer -v init
    
  4. 在新生成的buildozer.spec中更改以下字段:

    android.archs = arm64-v8a, armeabi-v7a
    android.release_artifact = aab
    p4a.branch = develop
    
  5. 现在我们需要创建一个密钥库来签署我们的 AAB。为此,运行 WSL shell 上的以下命令(我在 Windows 10 上使用 WSL 2 和 Ubuntu):

    mkdir -p /path/to/keystores/
    keytool -genkey -v -keystore /path/to/keystores/<keystore>.keystore -alias <keystore-alias> -keyalg RSA -keysize 2048 -validity 10000
    keytool -importkeystore -srckeystore /path/to/keystores/<your-new-key>.keystore -destkeystore /path/to/keystores/<keystore>.keystore -deststoretype pkcs12
    

    第二行会生成一个有效期为10000天的keystore(高于minimum of 25 years required by Google)。您需要将 <keystore> 替换为您要用于密钥库的文件名,并设置一个 <keystore-alias>(通常是您的应用程序的名称)。系统将要求您添加密码。尽量避免使用特殊字符。

    现在将您的 keystores 文件夹(/path/to/keystores/ 中的文件夹)移动到可从 WSL 外部访问的文件夹(例如,您可以将其移动到桌面)。在下文中,我假设您的密钥库文件夹现在位于 C:\Users\test\Desktop\keystores

  6. 我们现在终于可以构建 AAB 了。首先,请务必删除应用程序根文件夹中的所有 .buildozer 文件夹。然后 运行 以下内容:

     docker run --interactive --tty --rm \
         --volume "<app-project-folder>":/home/user/hostcwd \
         --volume "<app-project-folder>\.buildozer":/home/user/.buildozer \
         --volume "C:\Users\test\Desktop\keystores":/home/user/keystores \
         -e P4A_RELEASE_KEYSTORE=/home/user/keystores/<keystore>.keystore \
         -e P4A_RELEASE_KEYSTORE_PASSWD="<your-password>" \
         -e P4A_RELEASE_KEYALIAS_PASSWD="<your-password>" \
         -e P4A_RELEASE_KEYALIAS="<keystore-alias>" \
         buildozer-aab -v android release
    

D:\Developing\project\KivyMDFrontEnd> docker run --interactive --tty --rm --volume "D:\Developing\project\KivyMDFrontEnd":/home/user/hostcwd --volume "D:\Developing\project\KivyMDFrontEnd\.buildozer":/home/user/.buildozer --volume "D:\Developing\project\KivyMDFrontEnd\keystores":/home/user/keystores -e P4A_RELEASE_KEYSTORE=/home/user/keystores/keystore.keystore -e P4A_RELEASE_KEYSTORE_PASSWD="kivymdfast" -e P4A_RELEASE_KEYALIAS_PASSWD="kivymdfast" -e P4A_RELEASE_KEYALIAS="keystore-alias" buildozer-aab -v android release enter image description here