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

Vit*_*ile 5 python android buildozer android-app-bundle p4a

我刚刚看到Python for Android (p4a)刚刚引入了对 AAB 文件的支持。考虑到从 2021 年 8 月开始,新应用程序需要通过 Google Play 上的 Android App Bundle 发布,这对于任何处理 Android 应用程序的 Python 开发人员来说都是至关重要的补充。

由于我目前通过 Docker 使用 Buildozer,我想知道使它生成 .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 
Run Code Online (Sandbox Code Playgroud)

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

Vit*_*ile 2

社区终于完成了对Buildozer的AAB支持。尽管它仍然是一个待处理的拉取请求,但已经可以创建 AAB,并且我已经弄清楚如何使用 Docker 来完成它。

我发现了两个非常有趣的要点,对我帮助很大(一个是关于在 Ubuntu 上使用 Buildozer 创建 AAB,另一个是关于在同一平台上签署 AAB )。不过,我已经通过 Docker 在 Windows 上运行了所有内容,因此我认为分享我的做法是一个好主意。

  1. 在本地计算机中克隆Buildozer 存储库的 feat/aab-support 分支:

    git clone --single-branch --branch feat/aab-support https://github.com/misl6/buildozer.git
    
    Run Code Online (Sandbox Code Playgroud)
  2. 进入刚刚克隆的项目的根文件夹,并构建容器:

    cd buildozer
    docker build -t buildozer-aab .
    
    Run Code Online (Sandbox Code Playgroud)
  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
    
    Run Code Online (Sandbox Code Playgroud)
  4. 更改新生成的buildozer.spec中的以下字段:

    android.archs = arm64-v8a, armeabi-v7a
    android.release_artifact = aab
    p4a.branch = develop
    
    Run Code Online (Sandbox Code Playgroud)
  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
    
    Run Code Online (Sandbox Code Playgroud)

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

    现在将您的密钥库文件夹( 中的那个/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
    
    Run Code Online (Sandbox Code Playgroud)