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的官方仓库复制最新的
cryptographyrecipe文件到recipes/cryptography目录下 - 在
buildozer.spec里添加p4a.local_recipes = ./recipes,让Buildozer优先使用你本地的recipe
内容的提问来源于stack exchange,提问作者kurdish devil
相关产品推荐
相关产品推荐

