未添加相关依赖,Flutter发布版为何出现Analytics日志?
问题描述
在未直接添加任何分析(Analytics)相关依赖的情况下,我的Flutter发布版应用中出现了Analytics相关的报错日志,请问这是传递依赖导致的吗?还是确实存在Analytics相关的功能在运行?
Release模式下的报错日志:
E/flutter (22994): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: SocketException: Failed host lookup: 'api.tatadigital.com' (OS Error: No address associated with hostname, errno = 7) E/flutter (22994): #0 _NativeSocket.startConnect (dart:io-patch/socket_patch.dart:682) E/flutter (22994): #1 _RawSocket.startConnect (dart:io-patch/socket_patch.dart:1827) E/flutter (22994): #2 RawSocket.startConnect (dart:io-patch/socket_patch.dart:27) E/flutter (22994): #3 RawSecureSocket.startConnect (dart:io/secure_socket.dart:299) E/flutter (22994): #4 SecureSocket.startConnect (dart:io/secure_socket.dart:77) E/flutter (22994): #5 _ConnectionTarget.connect (dart:_http/http_impl.dart:2449) E/flutter (22994): #6 _HttpClient._getConnection.connect (dart:_http/http_impl.dart:2867) E/flutter (22994): #7 _HttpClient._getConnection (dart:_http/http_impl.dart:2872) E/flutter (22994): #8 _HttpClient._openUrl (dart:_http/http_impl.dart:2727) E/flutter (22994): #9 _HttpClient.openUrl (dart:_http/http_impl.dart:2591) E/flutter (22994): #10 IOClient.send (package:http/src/io_client.dart:35) E/flutter (22994): #11 BaseClient._sendUnstreamed (package:http/src/base_client.dart:93) E/flutter (22994): #12 BaseClient.post (package:http/src/base_client.dart:32) E/flutter (22994): #13 post.<anonymous closure> (package:http/http.dart:69) E/flutter (22994): #14 _withClient (package:http/http.dart:164) E/flutter (22994): #15 post (package:http/http.dart:68) E/flutter (22994): #16 AnalyticsApi._fireAnalyticsApi (package:api_core/api/analytics_api.dart:109) E/flutter (22994): #17 AnalyticsApi._fireEvents.<anonymous closure> (package:api_core/api/analytics_api.dart:68) E/flutter (22994): #18 _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:617) E/flutter (22994): #19 AnalyticsApi._fireEvents (package:api_core/api/analytics_api.dart:65) E/flutter (22994): #20 AnalyticsApi.report (package:api_core/api/analytics_api.dart:47) E/flutter (22994): #21 SharedContext.reportSessionStart (package:native_bridge/channel_handlers/shared_context.dart:67) E/flutter (22994): <asynchronous suspension>
当前使用的依赖列表:
dependencies: flutter: sdk: flutter http: ^0.13.3 provider: ^6.0.2 shared_preferences: ^2.0.5 google_fonts: ^2.0.0 cached_network_image: ^3.2.0 flutter_secure_storage: ^5.0.2 url_launcher: ^6.0.3 uni_links: ^0.5.1 shimmer: ^2.0.0 intl: ^0.17.0 fluttertoast: ^8.0.9 connectivity: ^3.0.3 carousel_slider: ^4.0.0-nullsafety.0 html: ^0.15.0 html_unescape: ^2.0.0 scrollable_positioned_list: ^0.2.0-nullsafety.0 fl_chart: ^0.45.0 flutter_html: ^2.2.1 scroll_to_index: ^2.0.0 share: ^2.0.1 built_collection: ^5.1.0 flutter_local_notifications: ^9.3.2 timezone: ^0.8.0 flutter_web_browser: ^0.17.0 flex_color_picker: ^2.3.0 translator: ^0.1.6 image_picker: ^0.8.4+1 uuid: ^3.0.5 dotted_border: ^2.0.0 retry: ^3.1.0 auto_size_text: ^3.0.0 visibility_detector: ^0.3.3 easy_image_viewer: ^1.1.0
注意:Debug模式下未发现此类日志。
解答
结论:这是传递依赖引入的Analytics功能
从报错栈可以明确看到,AnalyticsApi来自api_core包,触发逻辑来自native_bridge包——这两个包都没有出现在你直接声明的依赖列表里,说明是某个直接依赖的传递依赖引入的。
为什么Debug模式没有报错?
大概率是这个Analytics组件在Debug模式下默认禁用了上报逻辑,或者做了条件判断(比如只在Release模式下发起网络请求),所以Debug时不会触发这个域名解析请求,自然没有报错。
解决步骤
定位传递依赖来源
运行命令:flutter pub deps在输出结果中搜索
api_core或native_bridge,就能找到是哪个直接依赖引入了它们。处理Analytics功能
- 如果不需要这个分析功能:可以尝试通过
pubspec.yaml的依赖配置排除传递依赖,或者查看对应依赖的文档,找到关闭Analytics上报的开关。 - 如果需要保留:检查
api.tatadigital.com域名是否正确,确保网络环境能正常解析该域名,同时建议给这个网络请求添加异常捕获,避免未处理异常导致应用崩溃。
- 如果不需要这个分析功能:可以尝试通过
临时规避报错
若暂时无法排查依赖来源,可先在代码中全局捕获未处理异常,避免影响应用稳定性:void main() { FlutterError.onError = (details) { FlutterError.presentError(details); }; runZonedGuarded(() { runApp(MyApp()); }, (error, stackTrace) { // 在这里处理未捕获的异常,比如只记录日志不崩溃 }); }
内容的提问来源于stack exchange,提问作者OV3RKILL
相关产品推荐
相关产品推荐

