React Native应用适配Android 11时异步请求无法发起的兼容性问题咨询
React Native Android 11 异步请求异常兼容性配置方案
1. 适配Apache HTTP客户端移除变更
Android 11 正式移除了已废弃的Apache HTTP客户端库,低版本RN默认依赖该库实现网络请求,会直接导致请求失败。
- 在
android/app/src/main/AndroidManifest.xml的<application>节点下添加如下配置:
<uses-library android:name="org.apache.http.legacy" android:required="false" />
2. 调整网络安全配置适配CA证书信任规则
Android 11 默认不信任用户手动安装的CA证书,如果你的测试环境需要抓包或使用自定义CA证书,需要修改网络安全配置:
- 首先在
android/app/src/main/res/xml下新建network_security_config.xml文件,内容参考如下:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <!-- 测试环境配置,生产环境建议移除信任用户CA的配置 --> <base-config cleartextTrafficPermitted="true"> <trust-anchors> <certificates src="system" /> <certificates src="user" /> </trust-anchors> </base-config> <!-- 也可单独配置指定域名的信任规则,更安全 <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">你的业务接口域名</domain> </domain-config> --> </network-security-config>
- 在
AndroidManifest.xml的<application>节点添加属性关联该配置:
<application ... android:networkSecurityConfig="@xml/network_security_config" ...>
3. 排查网络权限配置
Android 11 对权限校验更严格,缺失必要权限会直接拦截请求,确保AndroidManifest.xml中已声明以下权限:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
4. 适配文件类请求的分区存储规则
如果你的异步请求涉及文件上传、下载操作,Android 11 强制开启分区存储,应用无法直接访问公共目录的普通文件,需要调整读写逻辑:
- 待上传的文件先复制到应用内部私有目录(对应
context.getFilesDir()路径)再发起请求 - 下载的文件优先存储到应用私有目录,需要保存到公共相册/下载目录时使用MediaStore API实现
5. 升级RN及网络依赖库版本
低于0.63版本的RN内置的okhttp版本未适配Android 11,存在兼容性bug,可升级RN到0.63及以上版本,也可单独升级okhttp依赖到4.x版本修复问题。
内容的提问来源于stack exchange,提问作者Luqman Arshad
相关产品推荐
相关产品推荐

