Flutter应用Release模式下API调用无返回问题求助
Flutter Release模式无法获取API数据的排查方案
1. 先查API的HTTPS证书
Debug模式会宽松处理证书问题,但Release模式下Android会严格校验SSL证书,这是最常见的坑:
- 确认你的API服务器用的是正规CA颁发的有效证书,没有过期、域名不匹配的情况
- 如果是测试环境必须用自签名证书,得给Android加信任配置:
- 把证书文件(比如
test.cer)放到android/app/src/main/res/raw目录 - 在
android/app/src/main/res/xml下新建network_security_config.xml,内容:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config> <domain includeSubdomains="true">你的API域名</domain> <trust-anchors> <certificates src="@raw/test"/> </trust-anchors> </domain-config> </network-security-config>- 在
AndroidManifest.xml的<application>标签里加一句:android:networkSecurityConfig="@xml/network_security_config"
- 把证书文件(比如
2. 核对API的Base URL
Debug时可能用的是本地局域网IP(比如192.168.3.10),但真机在Release模式下不在同一个局域网,根本访问不到:
- 换成公网可访问的域名,别用
localhost或者本地IP
3. 检查混淆规则(哪怕关了minifyEnabled也得注意)
就算你设置了minifyEnabled false,有些依赖库的默认混淆规则可能还是会影响网络请求类,比如用Dio或者Retrofit的话:
- 在
android/app/proguard-rules.pro里加这些规则:
然后确保-keep class 你的包名.** { *; } -keep class dio.** { *; } -keepattributes Signature -keepattributes *Annotation*build.gradle里的proguardFiles配置正确:release { signingConfig signingConfigs.config shrinkResources false minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' }
4. 抓Release模式的错误日志
光猜没用,抓日志才是最直接的:
- 把真机连到电脑,执行命令:
然后打开App触发API请求,看输出的错误信息——比如证书报错、连接超时、403权限问题,照着日志解决就行。adb logcat -s Flutter:D
5. 排查Android网络安全的其他限制
除了usesCleartextTraffic,还要确认:
AndroidManifest.xml的<application>标签里有没有其他限制网络的networkSecurityConfig配置- 要是用的Android 11+,排除下有没有需要
QUERY_ALL_PACKAGES权限的情况(一般API请求不需要,但可以排查)
内容的提问来源于stack exchange,提问作者brook yonas
相关产品推荐
相关产品推荐

