基于Kivy开发的YouTube转MP3 APK应用无法访问网络求助
我用Python的Kivy模块开发了一款YouTube转MP3下载器,在VS中运行代码时完全正常,但打包成APK后出现问题:粘贴链接点击“提交”按钮后无法下载视频。
通过添加try/except语句定位到错误出在第70行——应用无法获取视频的可用流。在VS中测试时,电脑断网情况下这行也会报错,因此推测问题是应用无法访问网络。我已取消buildozer.spec文件中授予应用网络权限的行的注释,但问题依旧,仍显示该行引发错误。
包含问题代码的片段如下:
try: # 查找并选择流 vid = yt.streams.filter(only_audio=True).first() # 这里出问题 try:# 下载视频 output_file = vid.download(r'''Internal storage/Download''') try: # 修改扩展名 base,ext=os.path.splitext(output_file) new_file = base+'.mp3' os.rename(output_file, new_file) self.verification.text=f'下载成功,新文件路径: {new_file}' except: self.verification.text="下载失败;os模块相关问题" except: self.verification.text="下载失败;无法下载视频" except: self.verification.text="下载失败,无法选择流"
排查与解决建议
确认buildozer.spec权限配置
确保android.permissions同时包含INTERNET和ACCESS_NETWORK_STATE,示例配置:android.permissions = INTERNET, ACCESS_NETWORK_STATE修改配置后必须重新打包,旧APK不会自动更新权限。
修正存储路径与权限
硬编码Internal storage/Download在Android环境下可能路径错误或缺少权限。需要添加WRITE_EXTERNAL_STORAGE(Android 10及以下)或MANAGE_EXTERNAL_STORAGE(Android 11+)权限,同时改用系统提供的公共下载目录路径,避免硬编码。更换YouTube下载库
若使用的是已停止维护的youtube-dl,换成yt-dlp试试,它对YouTube的API支持更稳定。在buildozer.spec的requirements中指定:requirements = python3,kivy,yt-dlp捕获详细错误日志
把模糊的异常提示改成捕获具体异常并输出日志,比如:except Exception as e: self.verification.text=f"无法选择流: {str(e)}" # 用Android日志工具输出详细信息 from android.util import Log Log.d("YTDL_ERROR", str(e))之后通过
adb logcat查看具体错误原因,比如网络请求被拦截、API访问受限等。检查设备网络环境
确认设备能正常访问YouTube,排除地区限制或代理导致的网络问题。
内容的提问来源于stack exchange,提问作者JC CLOUET

