You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kivy+Buildozer开发的Android应用启动崩溃排查求助

问题描述

使用Kivy 2.3.0 + Buildozer 1.5.0开发的Android应用,在Android 14设备上启动即崩溃,logcat关键错误如下:

W ziparchive: Unable to open '/data/app/~~.../farmhacks.ca.mqttapp-.../base.dm': No such file or directory

已尝试的解决措施:

  • 在buildozer.spec中添加INTERNET和WRITE_EXTERNAL_STORAGE权限
  • 清理并重新构建应用
  • 确认项目未主动使用base.dm文件

提出以下问题:

  1. base.dm是否来自Kivy内部?若为是,如何确保其被正确打包?
  2. 这是否为Buildozer打包问题?有哪些配置项需要检查?
  3. 还有哪些排查思路或潜在原因需要考虑?
问题解答

1. base.dm的来源与打包确认

base.dm是Kivy依赖的SDL2底层动态模块文件,用于Android平台的渲染等核心功能,属于框架内部文件,并非项目自定义资源。

要确保它被正确打包,可按以下操作:

  • 检查Python-for-Android(P4A)版本:Buildozer 1.5.0默认绑定的P4A版本可能存在Android 14兼容性缺陷,建议手动指定兼容版本。在buildozer.spec中添加配置:
    p4a.source_dir = ../python-for-android
    
    然后克隆最新版P4A仓库到指定路径,确保其支持Android 14。
  • 对齐API与NDK版本:在buildozer.spec中设置android.api = 34(Android 14对应API级别),同时指定android.ndk = 25b及以上版本,避免旧NDK导致的文件打包异常。

2. 是否为Buildozer打包问题及配置检查

这大概率是Buildozer打包时的兼容性问题,重点检查以下配置项:

  • API与NDK版本:确认android.api = 34、android.ndk = 25b(或更高兼容Android 14的版本),旧版NDK无法生成适配Android 14的文件结构。
  • 混淆规则:若使用release模式且开启了android.enable_proguard = True,ProGuard可能误删base.dm关联的类。临时关闭混淆测试,或在ProGuard规则中添加:
    -keep class org.libsdl.app.** { *; }
    -keep class org.kivy.** { *; }
    
  • 资源打包配置:检查buildozer.spec中的android.add_assets、android.exclude_assets是否误操作排除了SDL相关文件,确保框架依赖资源被正确纳入打包范围。
  • 清理缓存:执行buildozer android clean彻底清除旧缓存,再重新构建,避免缓存文件干扰打包结果。

3. 其他排查思路与潜在原因

  • Android 14权限限制:Android 14对文件访问权限做了更严格管控,即使添加了WRITE_EXTERNAL_STORAGE,若应用启动时直接访问外部存储,可能触发路径异常。可测试移除外部存储访问逻辑,或适配MANAGE_EXTERNAL_STORAGE权限(仅针对文件管理类应用)。
  • SDL2版本适配:Kivy依赖的SDL2版本可能与Android 14不兼容,可通过自定义P4A recipe指定适配的SDL2版本,确保底层模块兼容。
  • 深度日志分析:除base.dm的错误外,查看logcat后续的崩溃堆栈信息,该文件缺失可能只是表象,真正崩溃原因是后续无法加载依赖模块。
  • 跨设备测试:在Android 13及以下设备测试应用是否正常运行,确认问题是否仅出现在Android 14平台。

内容的提问来源于stack exchange,提问作者Kody Rogers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 22:52:25