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

APK中HTTP POST请求失效,但调试模式正常问题排查

打包APK后POST请求失效的排查方案

你遇到的情况是调试(模拟器/真机)时所有功能正常,但打包成APK后只有POST请求失效,GET请求正常,且已添加网络权限。结合你的代码,给出以下排查方向和解决办法:

1. 代码混淆导致请求异常

Release包默认开启R8混淆,可能会篡改http请求相关的代码逻辑,导致POST请求失效。

打开android/app/proguard-rules.pro,添加以下规则保留相关类不被混淆:

-keep class io.flutter.plugins.http.** { *; }
-keep class org.apache.http.** { *; }
-keep class com.google.gson.** { *; }
-keep class com.google.gson.annotations.** { *; }

如果你使用的是dio等其他网络库,需额外添加对应库的官方混淆规则。

2. JSON序列化存在问题

调试模式下Dart类型检查较宽松,但Release模式会做编译优化,若jsonBody未正确序列化为JSON字符串,会导致POST请求参数异常。

务必使用jsonEncode()生成请求体,避免手动拼接字符串:

// 正确示例
final jsonBody = jsonEncode({
  "username": "test",
  "password": "123456",
});

可在POST请求前打印jsonBody内容,对比调试与Release模式下的输出是否一致(需开启Release模式日志才能查看)。

3. SSL证书验证拦截请求

若你的API使用自签名SSL证书,Release模式下Flutter会严格校验证书,直接拦截请求。

两种解决方式:

  • 为域名配置正规的SSL证书(生产环境推荐);
  • 测试环境临时禁用证书验证(禁止用于生产):
    打开android/app/src/main/kotlin/你的包名/MainActivity.kt,添加以下代码:
    import javax.net.ssl.HttpsURLConnection
    import javax.net.ssl.SSLContext
    import javax.net.ssl.TrustManager
    import javax.net.ssl.X509TrustManager
    import java.security.cert.X509Certificate
    
    class MainActivity : FlutterActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            // 跳过SSL证书验证
            val trustAllCerts = arrayOf<TrustManager>(object : X509TrustManager {
                override fun checkClientTrusted(chain: Array<out X509Certificate>?, authType: String?) {}
                override fun checkServerTrusted(chain: Array<out X509Certificate>?, authType: String?) {}
                override fun getAcceptedIssuers(): Array<X509Certificate> = arrayOf()
            })
            val sslContext = SSLContext.getInstance("SSL")
            sslContext.init(null, trustAllCerts, java.security.SecureRandom())
            HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.socketFactory)
            HttpsURLConnection.setDefaultHostnameVerifier { _, _ -> true }
    
            super.onCreate(savedInstanceState)
        }
    }
    

4. 检查请求URL与参数

注意到你POST请求的URL是https://myap,比GET请求的https://myapi少一个字符i,虽调试时正常,但打包后可能因缓存或其他问题导致请求失败,建议先确认URL完全正确。

5. 开启Release日志定位具体错误

为了明确报错原因,需开启Release模式日志输出:

修改android/app/build.gradle中的buildTypes配置:

buildTypes {
    release {
        debuggable true // 开启调试模式
        minifyEnabled true
        shrinkResources true
        signingConfig signingConfigs.release
    }
}

之后通过adb logcat抓取日志,查看catchError中打印的e具体信息——是连接超时、证书错误还是参数格式问题,定位根源后即可针对性解决。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:01:31