Buildozer打包含aiofiles的APK编译成功但安装后闪退问题求助
aiofiles可正常集成到Buildozer打包的APK中,你遇到的闪退为配置错误、事件循环冲突两类问题,可按以下步骤修复:
1. 清理Buildozer spec依赖配置
你当前的requirements字段混入了大量Python标准库(threading、datetime、os、sys、re、asyncio、concurrent.futures、ast、cython、pip、setuptools等),这类库是Python环境自带组件,无需手动声明,多余声明会触发python-for-android编译时的依赖冲突,直接删除上述标准库声明,仅保留第三方依赖即可:
requirements = python3,kivy,pyjnius,kivymd,certifi,kivyauth,openssl,ws4py,google-auth,oauth2,urllib3,oauth2client,firebase,pygame,jwcrypto,pycryptodome,sseclient,requests_toolbelt,python_jwt,gcloud,rsa,cryptography,httplib2,pyrebase,sdl2,sdl2_image,sdl2_mixer,sdl2_ttf,firebase-auth,cachetools,google-cloud,firebase-client,google-cloud-storage,jwt,PIL,chardet,aiofiles,plyer
额外提示:未用到的nodejs、google等冗余依赖也可删除,降低编译冲突概率。
2. 开启必要Android权限
取消spec中android.permissions字段的注释,根据你的业务场景补充权限:
# 基础网络权限+存储读写权限,按需调整 android.permissions = INTERNET,WRITE_EXTERNAL_STORAGE,READ_EXTERNAL_STORAGE
同时取消API版本相关配置的注释,使用稳定的API等级避免兼容问题:
android.api = 33 android.minapi = 21
aiofiles操作文件/发起网络请求时没有对应权限,会直接抛出未捕获异常导致闪退。
3. 适配Kivy与asyncio事件循环
Kivy本身有独立的事件循环,直接调用asyncio原生运行方法会和Kivy循环冲突导致闪退,需要在代码入口处做事件循环适配:
import asyncio import platform from kivy.app import App from kivy.uix.widget import Widget import aiofiles # 安卓平台事件循环适配 if platform.system() == 'Android': asyncio.set_event_loop_policy(asyncio.DefaultEventLoopPolicy()) # 后续aiofiles异步操作需通过Kivy的异步调度器执行,不要单独启动新的asyncio事件循环
4. 清理缓存重新编译
修复配置后先执行buildozer android clean清除历史编译缓存,再重新执行打包命令,避免旧缓存导致异常。
5. 精准定位错误
如果修复后仍闪退,开启spec中android.logcat_filters = *:S python:D配置,打包debug版本APK安装后,通过adb logcat -s python命令即可查看具体的Python报错栈,可精准定位问题根源。
内容的提问来源于stack exchange,提问作者Foton

