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

Android 13环境下Buildozer打包Kivy应用Cython编译错误求助

解决Kivy Buildozer Android打包时_gstplayer.pyx的Cython编译错误

方案1:修改Kivy源码中的回调函数(直接解决编译问题)

  • 找到Buildozer缓存的Kivy源码路径,通常位于:
    ~/.buildozer/android/platform/python-for-android/dists/[你的应用包名]/src/kivy/lib/gstplayer/
    或全局缓存路径:~/.buildozer/android/platform/python-for-android/build/other_builds/kivy/[android_arch]/kivy/
  • 打开_gstplayer.pyx文件,定位错误提示中指定的回调函数
  • 在函数声明末尾添加noexcept修饰符,示例:
    原代码:
    cdef void on_bus_message(GstBus *bus, GstMessage *message, gpointer user_data):
    
    修改后:
    cdef void on_bus_message(GstBus *bus, GstMessage *message, gpointer user_data) noexcept:
    
  • 执行buildozer android clean清理缓存,再重新运行buildozer -v android debug打包

方案2:禁用GstPlayer,改用替代视频后端(适合无视频需求的应用)

你的应用基于Sympy做微分几何计算,大概率不需要GStreamer相关功能,可直接跳过该模块编译:

  • 在应用main.py开头添加配置,切换视频后端为ffpyplayer:
    from kivy.config import Config
    Config.set('graphics', 'video', 'ffpyplayer')
    
  • 在buildozer.spec的requirements中添加ffpyplayer:
    requirements = python3,kivy==2.2.1,ffpyplayer,sympy
    
  • 清理缓存后重新打包:buildozer android clean && buildozer -v android debug

方案3:指定兼容的Kivy版本

尝试使用已修复该noexcept编译问题的Kivy版本,在buildozer.spec中指定:

requirements = python3,kivy==2.3.0,sympy

(注:需确认该版本已修复GstPlayer编译问题,可参考Kivy官方更新日志)

内容的提问来源于stack exchange,提问作者Fluid Homer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 21:12:37