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

React Native Release构建中HTTP请求失败,需支持HTTP/HTTPS双协议

React Native Release构建下HTTP请求失败排查方案

问题背景

React Native应用在Release构建模式(模拟器、真机均出现此问题)下,HTTP请求会抛出空异常并失败,但相同请求在Development构建中完全正常;HTTPS请求则没有任何异常。已经在AndroidManifest.xml中设置了android:usesCleartextTraffic="true",使用的构建命令为npx react-native build-android --mode=release。

排查与解决步骤

1. 检查自定义网络安全配置

如果项目中配置了res/xml/network_security_config.xml,即使开了usesCleartextTraffic,也可能被这个文件限制明文流量:

  • 确保配置文件里明确允许明文:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>
</network-security-config>
  • 同时确认AndroidManifest的<application>标签已经关联这个配置:
<application
    ...
    android:networkSecurityConfig="@xml/network_security_config"
    android:usesCleartextTraffic="true">

2. 修正ProGuard/R8混淆规则

Release构建时,混淆工具可能会把网络请求相关的核心类(比如OkHttp、Retrofit的代码)给混淆掉,导致请求逻辑出错:

  • 打开android/app/proguard-rules.pro,添加对应网络库的混淆排除规则,以OkHttp为例:
# OkHttp相关类不混淆
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-dontwarn okhttp3.**

# Okio依赖不混淆
-keep class okio.** { *; }
-dontwarn okio.**

如果用的是Fetch API或者其他网络库,也要把对应的核心类加入不混淆列表。

3. 适配Android 11+的域名访问限制

Android 11(API 30)及以上版本,针对API 30+的应用,需要在AndroidManifest.xml里声明允许访问的域名或网络scheme:

<queries>
    <!-- 允许HTTP、HTTPS协议的访问 -->
    <intent>
        <action android:name="android.intent.action.VIEW" />
        <data android:scheme="http" />
    </intent>
    <intent>
        <action android:name="android.intent.action.VIEW" />
        <data android:scheme="https" />
    </intent>
    <!-- 也可以直接指定你的HTTP请求域名 -->
    <domain android:name="your-target-domain.com" />
</queries>

4. 开启Release构建调试定位异常

如果上面的方法都没解决,可以临时开启Release构建的调试模式,抓具体的错误日志:

  • 修改android/app/build.gradle里的release构建配置:
buildTypes {
    release {
        debuggable true // 临时开启调试
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
}

然后用adb logcat命令查看设备日志,找到网络请求相关的错误信息,就能定位空异常的具体原因了(上线前记得把debuggable改回false)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 12:43:12