使用Buildozer构建KivyMD 2.0应用部署时因架构不兼容崩溃
解决Buildozer构建KivyMD 2.0应用在ARM64设备上崩溃的问题
问题场景
使用Buildozer构建基于KivyMD 2.0的应用,buildozer.spec中的依赖配置如下:
requirements = python3,kivy,exceptiongroup,asyncgui,asynckivy,fuzzywuzzy,python-Levenshtein,materialyoucolor,PIL,pytesseract,packaging,plyer,https://github.com/kivymd/KivyMD/archive/master.zip
应用编译过程无异常,但部署到设备后直接崩溃,报错信息如下:
ImportError: dlopen failed: "/data/data/org.test.myapp/files/app/_python_bundle/site-packages/materialyoucolor/quantize/celebi.so" is for EM_X86_64 (62) instead of EM_AARCH64 (183)
注:使用KivyMD 1.2版本时应用可正常运行
问题原因
报错核心是架构不匹配:
celebi.so库文件是为x86_64架构编译的,而运行应用的设备采用ARM64(AARCH64)架构,系统无法加载与自身架构不兼容的二进制库,导致应用崩溃。
解决方案
- 适配
materialyoucolor的ARM64版本:
检查materialyoucolor包的官方资源,确认是否有针对ARM64架构的预编译版本;若没有预编译包,可改用源码安装方式,让Buildozer在编译阶段针对目标设备架构重新编译该库的二进制文件。 - 指定Buildozer目标架构:
在buildozer.spec中明确设置目标架构为ARM64,添加或修改配置项:
强制Buildozer为指定架构编译所有依赖,避免拉取通用或其他架构的预编译库。arch = arm64-v8a - 临时替代方案:
如果暂时无法获取适配ARM64的materialyoucolor版本,可尝试移除该依赖,改用其他支持ARM64的颜色处理库,保证应用基础功能正常运行。
内容的提问来源于stack exchange,提问作者Adel
相关产品推荐
相关产品推荐

