Kivy APK构建报错:Android平台64/32位库冲突致ImportError
解决Python-Bidi在Buildozer打包Android时的架构不兼容问题
错误原因
你同时指定了arm64-v8a和armeabi-v7a双架构打包,但python-bidi编译生成的bidi.so是64位二进制文件,在32位(armeabi-v7a)设备上运行时,系统无法加载64位库,从而触发dlopen failed错误。
解决方案
方案1:只构建单一32位架构(最简单有效)
修改buildozer.spec中的架构配置,只保留32位架构:
android.archs = armeabi-v7a
然后清理旧构建缓存,重新打包:
buildozer android clean buildozer android debug deploy run
这个方案能覆盖绝大多数Android设备,包括旧款32位设备,完全避开双架构编译的兼容性问题。
方案2:强制使用python-bidi的纯Python实现
python-bidi本身提供了纯Python的算法实现,不需要依赖编译的二进制库。在你的main.py最顶部添加以下代码,绕过对编译so的导入:
import sys # 禁用编译版的bidi模块,强制使用纯Python实现 sys.modules['bidi._bidi'] = None # 直接导入纯Python的显示函数 from bidi.algorithm import get_display
之后你处理阿拉伯文本时,直接调用get_display()函数即可,比如:
arabic_text = "العربية" formatted_text = get_display(arabic_text)
这个方案保留双架构打包的同时,避免了二进制库的架构冲突。
方案3:更新构建工具并重新编译
如果坚持要双架构打包,可以尝试更新Buildozer和Python-for-Android到最新版本,确保工具链支持双架构编译python-bidi:
pip install --upgrade buildozer python-for-android
然后清理缓存重新构建:
buildozer android clean buildozer android debug
额外注意
mysql-connector-python是带二进制扩展的库,在Android上也可能出现类似的架构兼容问题,建议替换为纯Python的数据库驱动(比如pymysql),降低打包风险。
内容的提问来源于stack exchange,提问作者Omar Tarek
相关产品推荐
相关产品推荐

