Flutter构建拆分ABI APK后无法从REST API获取数据问题排查
网络权限未正确配置
Release构建不会默认授予网络权限,需检查AndroidManifest.xml中是否显式声明了<uses-permission android:name="android.permission.INTERNET"/>,如果需要判断网络状态,还要添加ACCESS_NETWORK_STATE权限。缺失权限会直接导致App无法发起网络请求。代码混淆破坏网络请求库
Release构建默认启用混淆,若未给Dio、Retrofit等网络请求库添加对应的混淆规则,会导致库的核心类被篡改,无法正常发起或解析请求。需在proguard-rules.pro中添加对应库的混淆保留规则,比如Dio的规则:-keep class com.dio.** { *; } -keepattributes SignatureNull Safety兼容漏洞
使用--no-sound-null-safety参数时,代码中可能存在未处理的null值场景。比如API返回的字段为null,而模型类未用?或late修饰对应属性,导致解析时抛出静默异常,数据无法正常加载。需检查模型类的解析逻辑,添加异常捕获并处理null值。ABI拆分导致原生依赖缺失
--split-per-abi会生成对应单一CPU架构的APK,若项目依赖的原生网络插件(如某些自定义网络库)未适配目标ABI,或build.gradle中未配置正确的abiFilters,会导致插件无法正常初始化,进而阻断网络请求。需验证依赖插件对目标ABI的支持情况,调整构建配置。明文网络请求被拦截
Android 9及以上版本默认禁止明文HTTP请求,若你的API使用HTTP协议,且未在Release模式下配置网络安全策略,请求会被系统拦截。需在res/xml/network_security_config.xml中配置允许明文请求或信任的域名,并在AndroidManifest.xml的application标签中引用该配置。环境配置未切换
Debug模式下可能使用了测试API地址或代理配置,而Release构建时未切换到正确的生产/测试环境地址,导致请求无效地址,无法获取数据。需检查环境变量、配置文件,确保Release模式下的API地址正确。
内容的提问来源于stack exchange,提问作者Jitesh Kumar Sahoo

