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

Kivy安卓应用中Requests模块出现'temporary failure in name resolution'错误

解决Buildozer打包Kivy应用后Android端网络请求崩溃的问题

我之前在打包Kivy应用到Android时也碰到过几乎一模一样的问题,这个temporary failure in name resolution错误本质上是Android设备无法解析API的域名,导致无法建立网络连接。结合你的场景,给你几个实用的排查和解决方向:

1. 先确认Android网络权限是否配置正确

这是最容易忽略也最常见的原因!Android系统默认不会给APP授予网络权限,你需要在buildozer.spec配置文件里明确添加:

android.permissions = INTERNET

修改完配置后,记得清理之前的构建缓存(删除.buildozer文件夹),再重新执行buildozer android debug打包,避免旧配置残留。

2. 排查域名解析与网络环境问题

  • 先测试设备本身能否访问API:用Android设备的浏览器直接打开你的API地址,如果浏览器也无法访问,那可能是设备的DNS设置异常、移动网络限制,或者API域名本身的DNS配置有问题。可以尝试用API的IP地址代替域名测试,验证是否是DNS解析的锅。
  • 如果是DNS问题,你可以尝试切换设备的网络(比如从WiFi换成移动数据),或者在路由器/设备里手动设置公共DNS(比如8.8.8.8)。

3. 替换Requests为Kivy原生的UrlRequest

Requests模块虽然好用,但在Android打包环境下偶尔会出现兼容性问题。Kivy自带的UrlRequest是专门为移动平台优化的网络请求工具,兼容性更好,你可以试试替换代码:

原来用Requests的写法:

import requests

def check_api():
    try:
        response = requests.get("https://your-api-url.com")
        # 处理返回值
    except Exception as e:
        print(e)

换成UrlRequest的写法:

from kivy.network.urlrequest import UrlRequest

def on_api_success(req, result):
    # 处理API返回的结果
    print("API返回成功:", result)

def on_api_error(req, error):
    # 处理请求错误
    print("请求出错:", error)

def check_api():
    UrlRequest("https://your-api-url.com", on_success=on_api_success, on_error=on_api_error)

4. 检查Buildozer的依赖配置

确保你的buildozer.spec里的requirements包含了必要的依赖,如果继续用Requests的话,要加上requests:

requirements = python2,kivy==1.10.0,cython==0.25.2,requests

另外,旧版本的Kivy和Cython可能存在一些Android适配问题,如果你尝试上面的方法都无效,可以考虑把Kivy升级到1.11.x版本(保持和Buildozer兼容的前提下),可能能解决一些隐藏的兼容性bug。

5. 查看详细的崩溃日志

如果还是无法解决,可以通过adb logcat查看详细的崩溃日志,找到更具体的错误信息:

adb logcat | grep python

这样能帮你定位到底是网络层的问题,还是代码里的其他逻辑触发了崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:35:28