Flutter Release APK无法发起API请求,Debug版本正常求助
Flutter Release APK无法执行API调用的排查与解决
以下是针对该问题的常见排查方向和解决方案:
检查网络安全配置(Android 9+默认限制明文HTTP)
Android 9及以上版本默认禁止应用使用明文HTTP流量,如果你的API接口是HTTP协议而非HTTPS,Release包会直接拦截请求。解决方法如下:- 在
android/app/src/main/res/xml目录下创建network_security_config.xml文件,内容如下:<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true" /> </network-security-config> - 在
AndroidManifest.xml的application标签中添加配置引用:android:networkSecurityConfig="@xml/network_security_config"
- 在
排查混淆规则对API相关代码的影响
Flutter Release构建默认开启代码混淆,如果你的API请求依赖第三方库(如dio、http)或自定义数据模型类,混淆可能会破坏类结构导致请求失败。需要在android/app/proguard-rules.pro中添加对应规则:- 以dio为例,添加:
-keep class com.dio.** { *; } -keepattributes Signature -keepattributes *Annotation* - 自定义模型类保留规则:
替换-keep class com.your_app_package.models.** { *; }com.your_app_package为你实际的包路径。
- 以dio为例,添加:
确认Release环境的API地址配置正确
检查代码中是否根据构建模式区分了API环境,比如:import 'package:flutter/foundation.dart'; final String baseApiUrl = kReleaseMode ? "https://your-production-api.com" : "https://your-debug-api.com";确保Release模式下的地址是可正常访问的,没有拼写错误或权限限制。
排查证书校验问题
如果你的API使用自签名SSL证书,Release模式下系统会严格校验证书有效性,导致请求失败。测试阶段可临时跳过证书校验(生产环境不建议):
以http包为例:import 'dart:io'; import 'package:http/http.dart' as http; // 创建自定义HttpClient HttpClient customHttpClient = HttpClient() ..badCertificateCallback = ((X509Certificate cert, String host, int port) => true); http.Client client = http.IOClient(customHttpClient); // 使用client发起请求 final response = await client.get(Uri.parse(baseApiUrl));通过日志定位具体错误
用adb命令抓取Release包的运行日志,过滤Flutter相关输出,获取API请求的具体错误信息:adb logcat -s Flutter日志会显示连接超时、证书错误、HTTP状态码(如403、404)等关键信息,帮助精准定位问题。
内容的提问来源于stack exchange,提问作者Bharath Kandula
相关产品推荐
相关产品推荐

