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

基于Kivy+Buildozer开发Android端Roslibpy应用报twisted模块缺失错误

Kivy+Buildozer打包Android应用twisted.internet缺失崩溃解决

问题现象

  • 基于Kivy、Buildozer开发的Android ROS消息发布应用,桌面端(Windows/Ubuntu)运行正常,部署到Android设备后启动立即崩溃。
  • 已在buildozer.spec中添加roslibpy的全量依赖:autobahn、txaio、twisted,多次执行干净构建、参考公开的Twisted+Buildozer适配方案后问题仍存在。
  • 核心报错为模块缺失:
06-13 21:05:13.317 31150 31336 I python  :  Traceback (most recent call last):
06-13 21:05:13.318 31150 31336 I python  :    File "/home/ben/sirrl/KivyMD/HelloKivy/.buildozer/android/app/main.py", line 5, in <module>
06-13 21:05:13.318 31150 31336 I python  :    File "/home/ben/sirrl/KivyMD/HelloKivy/.buildozer/android/platform/build-arm64-v8a/build/python-installs/HelloKivyApp/arm64-v8a/roslibpy/__init__.py", line 113, in <module>
06-13 21:05:13.319 31150 31336 I python  :    File "/home/ben/sirrl/KivyMD/HelloKivy/.buildozer/android/platform/build-arm64-v8a/build/python-installs/HelloKivyApp/arm64-v8a/roslibpy/ros.py", line 11, in <module>
06-13 21:05:13.319 31150 31336 I python  :    File "/home/ben/sirrl/KivyMD/HelloKivy/.buildozer/android/platform/build-arm64-v8a/build/python-installs/HelloKivyApp/arm64-v8a/roslibpy/comm/__init__.py", line 9, in <module>
06-13 21:05:13.320 31150 31336 I python  :    File "/home/ben/sirrl/KivyMD/HelloKivy/.buildozer/android/platform/build-arm64-v8a/build/python-installs/HelloKivyApp/arm64-v8a/roslibpy/comm/comm_autobahn.py", line 6, in <module>
06-13 21:05:13.320 31150 31336 I python  :    File "/home/ben/sirrl/KivyMD/HelloKivy/.buildozer/android/platform/build-arm64-v8a/build/python-installs/HelloKivyApp/arm64-v8a/autobahn/twisted/__init__.py", line 36, in <module>
06-13 21:05:13.321 31150 31336 I python  :    File "/home/ben/sirrl/KivyMD/HelloKivy/.buildozer/android/platform/build-arm64-v8a/build/python-installs/HelloKivyApp/arm64-v8a/autobahn/twisted/util.py", line 32, in <module>
06-13 21:05:13.321 31150 31336 I python  :  ModuleNotFoundError: No module named 'twisted.internet'
06-13 21:05:13.322 31150 31336 I python  : Python for android ended.
  • 当前依赖配置如下:
requirements = python3,kivy,kivymd,pillow,roslibpy,autobahn,txaio,twisted

根因说明

该报错并非twisted包未安装,而是Buildozer底层使用的python-for-android(p4a)打包工具,对PyPI源直接拉取的twisted包没有做Android平台适配,打包时遗漏了twisted.internet等平台相关子模块;同时twisted运行所需的二级依赖没有被自动识别打包,也会触发该错误。

解决步骤

  • 第一步:修正依赖配置
    不要手动指定twisted的PyPI版本,让p4a调用内置的、已适配Android平台的twisted打包脚本,同时补全twisted运行必需的二级依赖,将buildozer.spec中的requirements项替换为以下内容:
    requirements = python3,kivy,kivymd,pillow,roslibpy,autobahn,txaio,twisted,constantly,incremental,automat,hyperlink,zope.interface,attrs,service_identity,pyopenssl
    
  • 第二步:全量清理构建缓存
    旧的错误打包产物会残存在缓存目录中,必须执行全量清理后再重新构建:
    buildozer android clean
    
    清理完成后再执行常规的打包、部署命令即可。
  • 第三步:适配事件循环与权限
    如果清理构建后仍报错,做两项配置调整:
    • 在buildozer.spec中找到android.permissions配置项,添加网络权限:
      android.permissions = INTERNET
      
    • 在项目main.py文件的最顶部,所有其他模块导入语句之前,添加Twisted与Kivy的事件循环适配代码,避免两者事件循环冲突:
      from twisted.internet import kivyreactor
      kivyreactor.install()
      
      完成后再导入roslibpy、Kivy等其他业务模块。
  • 补充排查项
    如果使用的是2023年9月之前发布的旧版python-for-android,先升级到最新稳定版,旧版本内置的twisted打包脚本存在子模块遗漏的已知bug,会触发相同报错。

内容的提问来源于stack exchange,提问作者Ben Schnapp

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:12:29