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

Kivy应用集成Cryptography模块时Buildozer打包失败求助

解决Kivy应用集成Cryptography后Buildozer安卓打包失败的问题

我之前也碰到过一模一样的问题,结合你的配置和已经尝试的操作来看,cryptography模块在安卓打包时的编译问题是核心——它依赖OpenSSL、libffi这些底层C库,Buildozer背后的Python-for-Android(p4a)必须正确处理这些依赖才能完成编译。下面是我亲测有效的解决方案:

1. 调整Buildozer配置里的p4a和NDK参数

cryptography对p4a分支和NDK版本有严格要求,你可以在buildozer.spec里修改这些配置:

[app]
# 先把cryptography锁定到3.4.8版本,这个版本和p4a的兼容性最好
requirements = python3,kivy,plyer,android,kivymd,httplib2,gcloud,jwcrypto,pyasn1,pyasn1-modules,rsa,PIL,protobuf==3.14.0,kivy_garden,mapview,requests,urllib3,chardet,idna,sseclient,oauth2client,cryptography==3.4.8,requests_toolbelt,python_jwt,firebase

[app:android]
# 指定NDK版本为23b,这是支持cryptography编译的稳定版本
android.ndk = 23b
android.ndk_api = 21

[p4a]
# 切换到p4a的develop分支,确保它有最新的cryptography编译支持
p4a.branch = develop

2. 给Buildozer添加构建时的系统依赖

你本地安装的依赖没用,因为Buildozer是在隔离的构建环境(比如Docker)里编译的,得在配置里指定要安装的系统包:
在buildozer.spec里追加这些配置:

[app]
# 明确指定使用sdl2引导程序,避免依赖冲突
android.bootstrap = sdl2
# 让p4a在构建时自动处理OpenSSL依赖
p4a.extra_build_args = --openssl

3. 处理可能的依赖冲突

你的requirements里同时有pycryptodome和cryptography,这两个都是加密类库,很容易出现编译冲突。建议先暂时把pycryptodome从requirements里删掉,先尝试打包,成功之后再根据你的业务需求决定是否重新添加(如果必须留,要确保两个库的版本兼容)。

4. 彻底清理缓存后重新构建

之前的buildozer android clean可能没清理干净,执行下面的完整清理+构建步骤:

# 清理Buildozer的本地缓存
buildozer android clean
# 手动删除p4a的构建缓存(这个是关键,有时候旧缓存会导致编译失败)
rm -rf .buildozer/android/platform/python-for-android/build
# 重新开始构建
buildozer android debug deploy run

5. 备用方案:使用预编译的cryptography recipe

如果上面的方法还是不行,你可以试试用社区维护的预编译recipe:

  • 在项目根目录创建一个recipes文件夹
  • 从p4a的官方仓库复制最新的cryptography recipe文件到recipes/cryptography目录下
  • 在buildozer.spec里添加p4a.local_recipes = ./recipes,让Buildozer优先使用你本地的recipe

内容的提问来源于stack exchange,提问作者kurdish devil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:53:50