解决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
相关产品推荐
相关产品推荐

