【问题标题】:How to build an .aab using Buildozer via Docker?如何通过 Docker 使用 Buildozer 构建 .aab?
【发布时间】:2021-11-07 23:13:47
【问题描述】:
【问题讨论】:
标签:
python
android
buildozer
android-app-bundle
p4a
【解决方案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)。您需要将<keystore> 替换为要用于密钥库的文件名,并设置<keystore-alias>(通常是应用程序的名称)。系统将要求您添加密码。尽量避免使用特殊字符。
现在将您的密钥库文件夹(/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