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

Retrofit 2 在Android 10(API 29)上无报错不运行,低版本设备可正常运行

问题原因及排查方案

1. 网络安全配置未正确挂载

你已经编写了网络安全配置XML,但需要确认在AndroidManifest.xml的<application>标签中添加了以下属性,否则配置不会生效:

<application
    ...
    android:networkSecurityConfig="@xml/network_security_config"
    ...>

虽然你访问的是HTTPS地址,不需要明文权限,但如果配置未挂载,部分高版本系统的网络校验规则可能拦截请求。

2. OkHttp/Retrofit 版本兼容性问题

低于3.14.x版本的OkHttp对Android 10(API29)的系统网络栈适配存在缺陷,会出现无报错无回调的情况。请检查你的依赖版本,升级到适配Android 10的版本:

// 参考兼容版本
implementation 'com.squareup.okhttp3:okhttp:4.10.0'
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-scalars:2.9.0'

3. 模拟器网络异常

API29模拟器经常出现网络连通性故障,可以按以下步骤排查:

  • 打开模拟器自带的浏览器,访问https://www.flickr.com/确认是否能正常加载
  • 检查模拟器是否设置了代理、VPN,或者当前网络对flickr有访问限制
  • 部分模拟器默认的DNS解析故障,可以尝试切换模拟器连接的DNS为公共DNS(比如8.8.8.8)

4. Logcat 日志被过滤

API29的Logcat默认过滤规则更严格,可能会屏蔽Debug级别的日志:

  • 把日志输出从Log.d改为Log.e验证是否有输出
  • 切换Logcat的过滤模式为「No Filters」,搜索你的TAG关键字确认是否有日志
  • 可以给OkHttp添加日志拦截器,直观查看请求的发送和响应情况:
// 先添加日志拦截器依赖
// implementation 'com.squareup.okhttp3:logging-interceptor:4.10.0'
val loggingInterceptor = HttpLoggingInterceptor().apply {
    level = HttpLoggingInterceptor.Level.BODY
}
val client = OkHttpClient.Builder()
    .addInterceptor(loggingInterceptor)
    .build()

5. 权限配置问题

虽然低版本可以正常请求,但高版本系统如果权限声明位置错误也会导致网络被拦截,请确认INTERNET权限是直接声明在AndroidManifest.xml的<manifest>标签下,而非<application>子标签内:

<uses-permission android:name="android.permission.INTERNET" />

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:48:05