You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 11:15:57