在线打包
Convert Pygame code to android apk,选择

谷歌colab在线服务即可。但是因为会重置故鄙人想要在本地部署完整的buildozer打包流程。
本地打包 – 我的环境
Windows 11 + WSL 2 (Ubuntu 22.04)
根据上文在线打包的colab提供的代码一样,在Ubuntu里依次执行即可。
依赖问题
在buildozer init后找到buildozer.spec文件,在里面搜索requirements = ,然后修改为:
python3==3.10.12,kivy==2.3.0,pyjnius==1.5.0,hostpython3==3.10.12,pygame
随后再根据你需要的依赖添加包名即可,无需在机器内的pip下载该模块,打包时会自动下载一遍。
有关编译
这些包会进行本地编译,所以耗时极长,20~60分钟较为合理,若卡在某些步骤请检查网络代理配置。
一、代理问题
有时无法访问github.com、python.org等,导致git clone卡住最后超时。
你无需设置all_proxy、http_proxy等环境变量,只需将WSL2的网络模式设置为NAT:

然后开启代理软件的TUN Mode:

(注意:Service Mode要安装)
这时候就能ping通了:

二、Gradle打包时的 Java heap space与无法回收内存
无法回收内存(没有出现此问题不用看)
由于 Gradle 8.x 导致 OpenJDK 11 不兼容 / 无法在 WSL v1 上构建 apk ·问题 #3000 ·Kivy/Android 版 Python
无法分配内存 ·问题 #1504 ·Kivy/Buildozer
总而言之:
1.切换 OpenJDK 版本至11
1.将 gradle-8.0.2 降级到 gradle-7.6.2,将 gradle:8.1.1 降级到 gradle:7.4.2 以保持 JDK 11 兼容性
sudo apt install -y openjdk-11-jdk
sudo update-alternatives --config java
(选择JDK11)
然后在buildozer.spec中找到

修改为

这样就会使用Gradle7.x构建。
Java heap space
造成的原因是资源文件体积过大,据本人经验,只要打包的资源文件超过200MB就会触发该错误。
解决方案是压缩文件体积,比如我游戏的背景图片都是相机原jpg图,数十张照片体积超过100MB。

经过可接受的压缩,将体积降到

成功打包。
性能问题
由于pygame对安卓平台很不友好,导致只能使用cpu渲染,所以帧率可谓极其缓慢。
解决方案是在你的程序中找到所有需要调用pygame绘制的地方,改为使用pysdl2实现。你可以整合一个pygame的api转sdl2的接口,然后实现sdl2绘制pygame的相同功能,最后替换即可。
Example: https://github.com/Himpq/GalEngine/