Flutter打Release APK正常 但Google Play分发版本无法联网怎么解决
可能的原因及对应排查方案
Google Play 应用签名证书指纹未加入服务白名单
这是概率最高的原因。如果你开启了Google Play的Play App Signing服务,Google会用其管理的官方签名证书对你上传的AAB进行重签,最终分发到用户的APK签名和你本地打包的Release APK签名完全不同。如果你的后端服务、第三方API(如地图、推送、统计等)配置了签名证书SHA-1/SHA-256校验,仅添加了本地打包的证书指纹,就会导致Google Play分发的版本请求被拦截。
排查方式:在Google Play控制台的「应用完整性」页面复制Google管理的签名证书指纹,添加到你的后端、第三方服务的白名单中即可。网络安全配置仅对Debug环境生效
如果你在项目中配置了network_security_config.xml,或者配置了android:usesCleartextTraffic属性,仅修改了debug目录下的AndroidManifest.xml,而main/release目录下的AndroidManifest未添加对应配置,会导致Release版本的网络请求被系统限制:- 如果你的应用需要访问HTTP明文流量,必须在
main目录下的AndroidManifest的application节点添加属性android:usesCleartextTraffic="true",或者在网络安全配置中明确放行对应明文域名 - 如果你在网络安全配置中仅添加了Debug阶段的抓包证书、测试域名放行规则,需要补充生产环境所需的域名、证书配置
- 如果你的应用需要访问HTTP明文流量,必须在
AAB构建时的资源/规则裁剪问题
部分开发者构建AAB时会开启极端的代码混淆、资源缩减配置,如果误裁剪了和网络请求相关的类、资源、或者AndroidManifest的权限配置项,也会导致网络异常。
排查方式:在本地构建AAB后用bundletool工具拆分出通用APK,安装测试是否复现问题,如果复现可以调整proguard-rules.pro文件,添加Flutter网络库相关的保留规则,比如常用的Dio库的混淆规则:-keep class com.dio.** {*;} -keep class io.flutter.app.** { *; } -keep class io.flutter.plugin.** { *; } -keep class io.flutter.util.** { *; } -keep class io.flutter.view.** { *; } -keep class io.flutter.** { *; } -keep class io.flutter.plugins.** { *; }权限配置位置错误
虽然你确认已添加INTERNET权限,但需要确认权限是写在main目录下的AndroidManifest.xml的根节点下,而不是application节点内部,也不是仅写在debug目录的配置文件中。正确的配置位置示例:<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.your.package"> <!-- 正确的权限配置位置 --> <uses-permission android:name="android.permission.INTERNET" /> <application ... > </application> </manifest>
内容的提问来源于stack exchange,提问作者derChris

