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

Posted

技术标签:

【中文标题】如何通过 Docker 使用 Buildozer 构建 .aab?【英文标题】:How to build an .aab using Buildozer via Docker? 【发布时间】:2021-11-07 23:13:47 【问题描述】:

我刚刚看到support for AAB files刚刚在Python for android (p4a)中引入。考虑到这一点,fom August 2021, new apps are required to publish with the Android App Bundle on Google Play,对于任何使用 Android 应用程序的 Python 开发人员来说,这是一个至关重要的补充。

由于我目前使用的是Buildozer via Docker,我想知道哪些步骤可以使它生成 .aab 而不是(或沿用)传统的 .apk

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

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

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

【问题讨论】:

我认为关于虚拟机的解决方法也适用于 Docker。我发现这个关于在没有 Android Studio 的情况下编译 aab,看起来很有希望。如果有人可以使其适应 buildozer 的工作流程,那就太好了:celersms.com/batch-aab.htm 【参考方案1】:

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

我发现了两个非常有趣的要点,它们对我有很大帮助(这个关于 creating an AAB with Buildozer on Ubuntu 和 another one about signing an AAB 在同一平台上)。不过,我已经通过 Docker 在 Windows 上运行了所有东西,所以我认为分享一下我的做法是个好主意。

    在本地机器上克隆feat/aab-support branch of the Buildozer repository:

    git clone --single-branch --branch feat/aab-support https://github.com/misl6/buildozer.git
    

    移动到你刚刚克隆的项目的根文件夹,并构建容器:

    cd buildozer
    docker build -t buildozer-aab .
    

    在使用 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
    

    在新生成的buildozer.spec中更改以下字段:

    android.archs = arm64-v8a, armeabi-v7a
    android.release_artifact = aab
    p4a.branch = develop
    

    现在我们需要创建一个密钥库来签署我们的 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 天的密钥库(高于minimum of 25 years required by Google)。您需要将&lt;keystore&gt; 替换为要用于密钥库的文件名,并设置&lt;keystore-alias&gt;(通常是应用程序的名称)。系统将要求您添加密码。尽量避免使用特殊字符。

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

    我们现在终于准备好构建 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
    

【讨论】:

以上是关于如何通过 Docker 使用 Buildozer 构建 .aab?的主要内容,如果未能解决你的问题,请参考以下文章

《Buildozer打包实战指南》

《Buildozer打包实战指南》

如何停止通过 buildozer 制作的 android 上的 kivy 应用程序崩溃。这些在计算机上运行良好

如何在Buildozer中构建kivy和Twisted

如何使用 buildozer 和最新的 kivy 构建 kivy 应用程序?

我无法通过 buildozer 生成 APK