You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Buildozer构建安卓应用时强制指定Kivy版本无效,出现Python 3.13下long类型编译错误求助

Buildozer构建安卓应用时强制指定Kivy版本无效,出现Python 3.13下long类型编译错误求助

兄弟我完全懂你这种卡壳到挠头的感觉!明明在spec里指定了Kivy2.3.1,但Buildozer偏要“自作主张”拉旧版本,这个long类型的编译报错我之前帮朋友排查过几乎一模一样的情况,给你几个亲测有效的解决方向:

1. 彻底清理Buildozer缓存,从头开始构建

.buildozer目录里的旧构建缓存、下载的依赖包经常会干扰新构建,导致指定的版本不生效。直接删掉整个缓存目录:

rm -rf .buildozer

然后重新执行buildozer android debug,这会强制Buildozer重新下载所有依赖,包括你指定的Kivy2.3.1版本,第一次构建可能慢一些,但能最大程度避免缓存问题。

2. 强制指定Kivy的Git源,绕开版本号歧义

有时候只写kivy==2.3.1可能会因为Buildozer的recipe缓存或者PyPI源的问题拉到旧包,试试在requirements里直接指定Kivy官方仓库的2.3.1标签版本:

# 在buildozer.spec的requirements行改成:
requirements = python3,kivy@git+https://github.com/kivy/kivy.git@2.3.1,cython==3.0.10,pyjnius==1.7.0,certifi,charset-normalizer,docutils,filetype,idna,pygments,requests,urllib3

这样Buildozer会直接从GitHub拉取2.3.1的精确代码,不会再用旧版本的文件。

3. 检查Python-for-Android(P4A)的Recipe配置

你说找不到P4A目录,其实构建后.buildozer/android/platform/python-for-android就是P4A的路径,你可以进去查看Kivy的Recipe文件(recipes/kivy/recipe.py),确认里面的版本和源是不是正确的2.3.1。如果不对,你可以在spec里指定P4A的最新稳定分支,确保Recipe是更新过的:

# 在buildozer.spec里添加:
p4a.source_dir = https://github.com/kivy/python-for-android.git@master

或者指定P4A的稳定版本标签,比如@v2024.01.01,避免用旧的Recipe。

4. 临时修复构建文件,验证问题根源

如果上面的步骤还没生效,你可以在构建报错后,找到临时生成的weakproxy.pyx文件(路径大概是.buildozer/android/platform/build-arm64-v8a/build/venv/lib/python3.13/site-packages/kivy/weakproxy.pyx),手动修改第257行:

# 把原来的代码
def __long__(self):
    return long(self.__ref__())

# 改成
def __long__(self):
    return int(self.__ref__())

然后重新执行构建命令,如果这次能成功编译,就说明确实是Buildozer拉错了Kivy版本,回到步骤2-3强制指定正确的源即可。

最后补充

Python3.13属于比较新的版本,可能和一些旧的PyPI包兼容性还在磨合,你指定的cython>=0.29.36建议改成具体的cython==3.0.10,这是Kivy2.3.1官方推荐的Cython版本,能减少编译兼容性问题。另外也可以把Buildozer更新到最新版本:

pip install --upgrade buildozer

新版本的Buildozer对Python3.13和Kivy2.3.1的支持会更完善。

火山引擎 最新活动