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

解决Colab中Buildozer构建报错:修改python-for-android文件移除stdout

解决Buildozer + python-for-android在Google Colab中的"AttributeError: 'str' object has no attribute 'stdout'"问题

问题背景

在Google Colab使用Buildozer构建Android项目时,触发AttributeError: 'str' object has no attribute 'stdout'错误,错误来自Buildozer自动安装的python-for-android(p4a)代码。已尝试移除新增依赖/权限、切换p4a的master/develop分支、修改avdmanager调用代码,均未解决。

解决方案

1. 锁定python-for-android稳定版本

Colab环境下默认拉取的p4a分支可能存在兼容性问题,手动指定稳定版本:

  • 先在Colab中克隆指定版本的p4a:
    !git clone https://github.com/kivy/python-for-android.git -b 2024.02.03
    
  • 修改项目的buildozer.spec文件,指定p4a源码目录:
    p4a.source_dir = /content/python-for-android
    

2. 修复p4a的avdmanager调用逻辑

找到p4a安装目录下的pythonforandroid/tools.py文件,定位avdmanager相关函数,替换为以下逻辑(确保返回的是命令输出文本而非异常封装的字符串):

import subprocess

def avdmanager(args):
    return subprocess.check_output(
        ['avdmanager'] + list(args),
        stderr=subprocess.STDOUT,
        text=True
    )

然后在调用该函数的代码处,直接使用:

avdmanager('list', 'target').split('\n')

3. 重置Colab构建环境

清理旧缓存并重新安装依赖:

# 清理Buildozer缓存
!buildozer android clean
!rm -rf .buildozer/

# 升级Buildozer和依赖
!pip install --upgrade buildozer
!pip install --upgrade cython==0.29.33

4. 校验Java环境版本

Buildozer要求Java 8或11,确保Colab环境符合要求:

!java -version
# 若版本不符,切换到Java 11
!sudo update-alternatives --set java /usr/lib/jvm/java-11-openjdk-amd64/bin/java
!sudo update-alternatives --set javac /usr/lib/jvm/java-11-openjdk-amd64/bin/javac

内容的提问来源于stack exchange,提问作者Fabrício Gama

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:00:46