在Colab用Buildozer打包Kivy APK遇ffpyplayer DistutilsClassError问题
解决Buildozer构建APK时的
DistutilsClassError错误 问题根源
这个错误是因为FFBuildExt类未正确继承distutils.cmd.Command基类,通常由依赖版本不兼容、Colab环境残留旧构建缓存,或是FFmpeg相关构建脚本的问题导致。
分步解决方案
1. 彻底清理构建缓存
Colab的临时环境容易残留旧构建文件,先完全清理:
!buildozer clean !rm -rf .buildozer .gradle
2. 锁定兼容的依赖版本
在buildozer.spec中指定稳定、兼容的依赖版本,避免版本冲突:
- 修改
requirements字段,例如:requirements = python3,kivy==2.2.1,ffpyplayer==4.5.0 - 同步Android构建环境版本:
android.api = 33 android.ndk = 25b android.sdk = 24
3. 修复自定义脚本的继承问题(如果涉及)
如果你的项目中自定义了FFBuildExt类(比如在setup.py中),确保它正确继承Command基类:
from distutils.cmd import Command class FFBuildExt(Command): # 必须实现的三个核心方法 def initialize_options(self): pass def finalize_options(self): pass def run(self): # 你的FFmpeg构建逻辑 pass
4. 重新安装Buildozer及系统依赖
Colab默认环境可能缺少必要依赖,按官方稳定流程重新安装:
# 安装系统依赖 !sudo apt-get update && sudo apt-get install -y git zip unzip openjdk-17-jdk python3-pip autoconf libtool pkg-config zlib1g-dev libncurses5-dev libncursesw5-dev libtinfo5 cmake libffi-dev libssl-dev # 安装稳定版Buildozer !pip install buildozer==1.4.0
5. 重新触发构建
清理完成后执行构建命令:
!buildozer android debug
额外排查点
- 如果
buildozer.spec中配置了p4a.local_recipes或p4a.source_dir,暂时注释掉这些自定义配置,排除第三方食谱的问题 - 确保Colab运行时使用Python 3.8~3.10版本,高版本Python(3.11+)与Buildozer兼容性较差
内容的提问来源于stack exchange,提问作者jafar qolam ali
相关产品推荐
相关产品推荐

