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

Flutter http包异常求助:荣耀FNE-NX9 Android13正式版API返回空

问题排查与解决建议

1. 检查ProGuard/R8混淆规则

发布版本默认开启代码混淆,若http包相关类被混淆,会导致网络请求逻辑失效。在android/app/proguard-rules.pro中添加以下规则:

-keep class io.flutter.plugins.http.** { *; }
-keep class com.your_package_name.** { *; }  // 替换为你的应用包名
-keep class org.apache.http.** { *; }

若使用http包的底层依赖,也需确保相关类不被混淆。

2. 验证API服务器的签名白名单

调试模式使用调试签名,而Play Store发布的应用可能采用Google Play App Signing的签名(与本地签名不同)。如果API服务器设置了应用签名校验(如SHA-1/SHA-256白名单),需将发布版本的签名指纹添加到服务器白名单:

  • 登录Google Play Console → 目标应用 → 应用签名 → 复制SHA-1或SHA-256指纹
  • 将该指纹添加到API服务器的允许列表中

3. 捕获发布版本的网络错误日志

调试模式可直接查看控制台日志,但发布版本无法实时查看。可在网络请求逻辑中添加错误捕获并上报到崩溃平台(如Firebase Crashlytics),或写入本地文件:

try {
  final response = await http.get(Uri.parse("你的API地址"));
  if (response.statusCode != 200) {
    FirebaseCrashlytics.instance.recordError(
      Exception("API请求失败: ${response.statusCode}"),
      StackTrace.current,
    );
  } else if (response.body.isEmpty) {
    FirebaseCrashlytics.instance.log("API返回空内容");
  }
} catch (e) {
  FirebaseCrashlytics.instance.recordError(e, StackTrace.current);
}

通过日志可定位是请求未发送、证书错误还是服务器拒绝等具体问题。

4. 检查SSL证书有效性

若API使用HTTPS协议,Android 13对证书合规性要求严格。调试模式下可能允许自签名或过期证书,但发布版本会直接拦截此类请求。确保API服务器使用受信任的CA颁发的有效证书,且证书链完整。

5. 确认Android 13网络相关配置

虽已添加usesCleartextTraffic="true",仍需确保:

  • AndroidManifest.xml中声明必要的网络权限:
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    
  • 若应用在后台发起网络请求,需确认是否符合Android 13的后台网络限制(可临时将应用置于前台测试,看是否能正常获取数据)。

6. 对比调试与发布模式的环境变量

检查代码中是否根据构建模式使用了不同的API地址(如调试用测试环境,发布用生产环境),若生产环境API地址配置错误,会导致返回空内容。可通过kReleaseMode判断当前模式:

import 'package:flutter/foundation.dart';

final String apiBaseUrl = kReleaseMode 
    ? "生产环境API地址" 
    : "测试环境API地址";

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 01:05:06