Flutter项目url_launcher上架Play商店失效 调试模式运行正常
Flutter发布Play商店后url_launcher失效问题解决
常见原因及对应解决方案
原因1:Android 11+应用可见性权限缺失
Android 11(API 30)及以上系统限制了应用查询其他已安装应用的能力,调试模式下默认放行该权限,正式发布后权限规则严格执行,未配置对应查询规则时url_launcher无法识别可处理跳转请求的应用,导致功能失效。
解决步骤:
- 打开项目
android/app/src/main/AndroidManifest.xml文件 - 在
<manifest>根标签下(非<application>标签内部)添加查询规则:
<queries> <!-- 适配http/https链接跳转 --> <intent> <action android:name="android.intent.action.VIEW" /> <data android:scheme="https" /> </intent> <intent> <action android:name="android.intent.action.VIEW" /> <data android:scheme="http" /> </intent> <!-- 如需跳转拨号、短信、第三方应用自定义scheme,可对应添加intent规则 --> <intent> <action android:name="android.intent.action.DIAL" /> <data android:scheme="tel" /> </intent> </queries>
原因2:Release包混淆裁剪了依赖类
调试模式默认不开启代码混淆,正式打包开启R8/ProGuard混淆时,如果没有配置url_launcher的免混淆规则,相关功能类会被误裁剪,导致调用无响应。
解决步骤:
- 打开项目
android/app/proguard-rules.pro文件 - 添加如下免混淆规则:
-keep class io.flutter.plugins.urllauncher.** { *; }
原因3:HTTP明文流量被系统拦截
如果你跳转的链接为HTTP协议(非HTTPS),Android 9(API 28)及以上系统默认禁止明文流量访问,调试模式下默认允许该行为,正式发布后会被系统拦截。
解决步骤:
- 优先将所有跳转链接替换为HTTPS协议
- 如必须使用HTTP链接,在
AndroidManifest.xml的<application>标签中添加属性:android:usesCleartextTraffic="true"
原因4:url_launcher调用逻辑不兼容
部分旧版本的url_launcher在release模式下直接调用跳转方法前如果不做可达性校验,会出现调用失效的问题。
解决步骤:
- 将pubspec.yaml中的url_launcher依赖升级到最新稳定版
- 调整调用逻辑,先校验链接可访问再执行跳转:
import 'package:url_launcher/url_launcher.dart'; Future<void> jumpToUrl(String targetUrl) async { final Uri uri = Uri.parse(targetUrl); if (await canLaunchUrl(uri)) { await launchUrl(uri); } }
补充注意:如果以AAB格式上传到Play商店,确认打包时未开启过度的资源裁剪规则,避免url_launcher依赖的核心资源被误删除。
内容的提问来源于stack exchange,提问作者Flutterconfusions
相关产品推荐
相关产品推荐

