使用Buildozer构建的Android APK申请权限后崩溃问题求助
解决Kivy/KivyMD打包APK后权限申请崩溃(Unknown provider警告)
问题场景
应用基于Kivy 2.0.0、KivyMD 1.1.1开发,在Debian 11虚拟机的Python虚拟环境中打包为APK后,申请权限时突然崩溃,仅输出警告:
[WARNING] [Base] Unknown <android> provider.
spec文件依赖配置如下:
requirements = python3,kivy==2.0.0,kivymd==1.1.1,matplotlib,requests,urllib3,pillow,https://github.com/kivy-garden/graph/archive/master.zip,contourpy, cycler, fonttools, importlib-resources, kiwisolver, numpy, packaging,pyparsing, python-dateutil,chardet
解决方案
补全权限配置并规范申请逻辑
确认buildozer.spec中已声明应用所需的Android权限,例如存储权限:android.permissions = WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE权限申请代码需使用Kivy官方推荐的
pyjnius调用Android原生API,避免自定义provider导致冲突。升级Kivy及KivyMD版本
Kivy 2.0.0存在Android provider处理的已知兼容性问题,建议升级到2.1.0及以上版本,同时同步升级KivyMD到适配版本(如1.2.0+),修改spec的requirements行:requirements = python3,kivy>=2.1.0,kivymd>=1.2.0,matplotlib,requests,urllib3,pillow,...清理编译缓存后重新打包
虚拟机环境下的编译缓存可能引发依赖冲突,执行以下命令清理后重新构建:buildozer android clean buildozer android debug deploy run排查第三方garden组件兼容性
你引入的kivy-garden/graphmaster分支版本可能未适配Android provider机制,尝试替换为稳定发布版,或暂时移除该组件测试是否解决崩溃,确认问题后再针对性适配。检查自定义AndroidManifest配置
如果使用了自定义AndroidManifest.xml,确保其中没有未定义的<provider>标签,避免与Kivy自动生成的manifest内容冲突。若无需自定义manifest,可删除buildozer.spec中android.add_manifest相关配置。
内容的提问来源于stack exchange,提问作者pycode80
相关产品推荐
相关产品推荐

