Spotipy Kivy项目经Buildozer打包安卓APK后无法运行
修复方案
以下问题按出现概率从高到低排序,逐一修改即可解决APK运行异常问题:
1. 未声明Android网络权限
Android系统默认禁止所有应用发起网络请求,仅配置依赖不会自动授予网络权限,所有Spotify API请求会被直接拦截。
修复方式:
打开buildozer.spec配置文件,找到android.permissions配置项,修改为:
android.permissions = INTERNET
2. Spotipy缓存写入权限错误
SpotifyClientCredentials默认会在程序运行目录写入token缓存文件,Android环境下默认运行目录为系统根目录,应用无写入权限,会直接触发IO异常。
修复方式:
初始化Spotify实例时禁用缓存(客户端凭证模式token有效期1小时,轻量应用无需持久化缓存,无功能影响),修改get_songs方法中的初始化代码:
sp = spotipy.Spotify( client_credentials_manager=SpotifyClientCredentials( client_id=self.SPOTIPY_CLIENT_ID, client_secret=self.SPOTIPY_CLIENT_SECRET, cache_handler=None ) )
3. HTTPS证书验证失败
Buildozer打包的Python运行环境默认不携带系统CA根证书库,urllib3/requests发起HTTPS请求时会因找不到可信证书抛出SSL错误。
修复方式:
- 第一步,修改
buildozer.spec的依赖配置,删除重复的urllib3条目,新增certifi依赖:
requirements = python3,kivy==2.1.0,spotipy,charset-normalizer,redis,requests,flask,flask-cors,urllib3,packaging,idna,certifi
- 第二步,在代码所有导入语句最下方添加证书路径配置:
import os, certifi os.environ['REQUESTS_CA_BUNDLE'] = certifi.where()
4. KV语法冗余导致组件初始化异常
当前KV字符串开头单独写了MyLayout:实例化语句,下方又定义了<MyLayout>类规则,PC端Kivy做了语法容错可正常运行,Android端打包环境下会触发组件重复加载错误。
修复方式:删除KV字符串开头单独的MyLayout:行,修改后的KV内容如下:
kv=""" <MyLayout>: orientation:"vertical" TextInput: id:text Button: text:"start" on_release: root.start() Label: text:root.Output """
重新打包注意事项
修改完上述配置和代码后,先执行buildozer android clean清除旧构建缓存,再执行打包命令,避免旧配置残留导致问题复现。测试时需确保设备网络可正常访问Spotify服务。
内容的提问来源于stack exchange,提问作者kostas214pro
相关产品推荐
相关产品推荐

