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

Buildozer打包KivyMD生成APK打开后闪退问题求助

适配KivyMD项目的Buildozer打包解决方案

完整requirements配置

闪退的核心原因为未声明项目依赖的第三方库,调整后的requirements配置如下,适配kivy2.0.0、kivymd0.104.1版本:
requirements = python3,kivy==2.0.0,kivymd==0.104.1,numpy,nltk,tflite-runtime,keras-applications,keras-preprocessing
配置说明:

  • numpy直接使用Buildozer提供的预编译安卓版本即可,无需指定过高版本,避免出现编译兼容问题
  • 不直接引入完整keras和tensorflow,安卓端仅需tflite-runtime即可运行轻量化的tflite格式模型,你需要提前将本地训练好的h5格式keras模型转换为tflite格式,避免完整tensorflow无法在安卓端运行、包体积过大的问题
  • nltk为纯Python库,可直接兼容安卓,但注意打包后无法自动下载语料库,需要提前将用到的nltk语料文件放到项目目录,随assets资源一同打包

额外buildozer.spec配置调整

除了requirements之外,还需要调整以下配置避免后续闪退:

# 将nltk语料、tflite模型作为assets资源打包进APK
android.add_assets = ./nltk_data,./model.tflite
# 适配kivy2.0.0的NDK版本要求
android.ndk = 21b
# 调整安卓API版本,提升兼容性
android.api = 30
# 给APP分配足够的运行内存,避免模型加载时OOM闪退
android.heap_size = 512m

代码适配调整

你需要在main.py入口最开始添加路径适配逻辑,避免nltk、模型加载失败:

import os
import nltk

# 安卓端环境路径适配
if "ANDROID_APP_PATH" in os.environ:
    # 指定nltk语料库路径
    nltk_data_path = os.path.join(os.environ["ANDROID_APP_PATH"], "assets", "nltk_data")
    nltk.data.path.append(nltk_data_path)
    # 指定tflite模型路径
    model_path = os.path.join(os.environ["ANDROID_APP_PATH"], "assets", "model.tflite")
else:
    # 本地测试路径
    nltk_data_path = "./nltk_data"
    model_path = "./model.tflite"
    nltk.data.path.append(nltk_data_path)

模型加载部分替换为tflite加载逻辑:

import tflite_runtime.interpreter as tflite
interpreter = tflite.Interpreter(model_path=model_path)
interpreter.allocate_tensors()
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:54:06