使用Buildozer打包Kivy应用为Android应用时遇架构不兼容错误
解决Kivy+Buildozer打包Android时的dlopen架构不兼容问题
错误dlopen failed: ... has unexpected e_machine: 62 (EM_X86_64)的核心原因是:打包生成的APK中包含了x86_64架构的原生库,而你的Android手机是ARM架构(比如arm64-v8a、armeabi-v7a),动态链接器无法识别非本机架构的库文件。
以下是针对性的解决方案:
强制指定Android目标架构
修改buildozer.spec中的android.arch参数,明确设置为你的手机支持的ARM架构,比如:android.arch = arm64-v8a之后清理旧构建缓存并重新打包:
buildozer android clean buildozer -v android debug强制从源码交叉编译依赖库
由于预编译的wheel包是针对x86_64架构的,需要让Buildozer从源码编译依赖库以适配Android ARM架构。在buildozer.spec中添加或修改以下配置:requirements = python3,kivy,charset-normalizer,cchardet android.pip_args = --no-binary :all:--no-binary :all:参数会强制pip下载依赖的源码包,再通过NDK交叉编译成Android兼容的原生库。检查并更新NDK版本
旧版本NDK可能存在架构支持问题,确保buildozer.spec中指定的NDK版本为稳定兼容版:android.ndk_version = 25b验证APK架构正确性
打包完成后,通过以下命令检查APK中的库架构:unzip -l your_app-0.1-debug.apk | grep lib/输出结果中应只包含你指定的ARM架构目录(如
lib/arm64-v8a/),不应出现lib/x86_64/目录。
如果以上步骤仍未解决问题,直接删除项目根目录下的.buildozer缓存文件夹,再重新执行构建流程,避免缓存中的旧x86_64库文件干扰。
内容的提问来源于stack exchange,提问作者Zephyr
相关产品推荐
相关产品推荐

