BeeWare打包APK运行闪退 报numpy._multiarray_umath模块缺失错误
BeeWare打包APK集成airtest闪退问题排查方案
核心报错信息
E Python : raise ImportError(msg) E Python : ImportError: E Python : E Python : 重要提示:请阅读以下内容获取该问题的解决建议! E Python : E Python : numpy C扩展导入失败。该错误可由多种原因引发,通常与环境配置、NumPy安装方式异常有关。 E Python : E Python : 请优先检查核对以下信息: E Python : E Python : * 当前Python版本为:Python3.9,来源路径为"" E Python : * 当前NumPy版本为:"1.22.4" E Python : E Python : 原始错误信息:No module named 'numpy.core._multiarray_umath'
问题根因
该问题属于BeeWare安卓打包的典型C扩展适配问题:
- BeeWare打包安卓APK时依赖Chaquopy提供的Python运行环境,仅支持经过安卓ABI交叉编译的Python依赖包,本地桌面环境安装的numpy是适配电脑x86/ARM架构的桌面版本,没有针对安卓系统编译,打包进APK后核心C扩展
numpy.core._multiarray_umath无法被系统加载 - 日志中Python来源路径为空,是因为打包阶段没有将numpy的对应库文件正确纳入APK的Python搜索路径,运行时遍历路径找不到对应模块
- airtest本身是面向桌面端测试的框架,默认依赖的numpy、opencv等库均为桌面版本,未做安卓适配,直接集成会触发依赖兼容问题
排查解决步骤
- 清理全量构建缓存:执行
briefcase clean android命令删除所有历史构建产物、缓存依赖,避免旧版本错误依赖残留干扰后续构建 - 调整numpy版本适配:卸载本地1.22.4版本numpy,在项目
pyproject.toml中指定适配Chaquopy+Python3.9的numpy预编译版本(推荐1.21.x系列,该系列有完整的安卓预编译包),禁止打包时拉取PyPI源上的桌面版numpy - 校验依赖打包完整性:完成一次构建后解压生成的APK文件,检查
lib/<目标ABI架构>目录下是否存在numpy对应的so库文件,重点确认_multiarray_umath相关so是否存在 - 修复路径配置问题:在
pyproject.toml的安卓配置段[tool.briefcase.app.<你的应用名>.android]中添加sys_path配置项,明确将numpy的内置安装路径加入运行时Python模块搜索路径 - 替换适配移动端的airtest依赖:默认PyPI源的airtest未做安卓适配,需要替换为社区适配移动端的分支版本,同时将airtest依赖的opencv、pywin32等桌面端专属依赖全部移除,替换为Chaquopy源提供的安卓预编译版本
- 核对ABI配置:确认打包配置中勾选的目标ABI(arm64-v8a/armeabi-v7a/x86_64)和你使用的所有C扩展库提供的ABI版本完全匹配,避免出现架构不兼容导致库加载失败
内容的提问来源于stack exchange,提问作者MR WU
相关产品推荐
相关产品推荐

