当前位置:   article > 正文

Flutter bugly 傻瓜式操作,上传崩溃日志与符号表解析之Android

flutter bugly

1.在 bugly 官网创建应用

 此处不表并附上官网地址 腾讯Bugly - 一种愉悦的开发方式 _android anr_android anr分析_iOS崩溃日志分析平台

    

2.创建完应用后,先对接 android sdk   在 flutter/android/app/build.gradle 文件中

  1. android { 
  2.     defaultConfig { 
  3.         ndk { 
  4.             // 设置支持的SO库架构 
  5.             abiFilters 'armeabi’ 
  6.             //, 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a’ 
  7.        } 
  8.     } 
  9. dependencies { 
  10.     implementation 'com.tencent.bugly:crashreport:latest.release’ 
  11.     //其中latest.release指代最新Bugly SDK版本号,也可以指定明确的版本号,例如4.0.3
  12. }

3.代码集成

  1. 通过“AndroidManifest.xml”配置后的初始化方法如下:
  2. CrashReport.initCrashReport(getApplicationContext());

4.在 flutter main 文件中改造 app 入口,用于拦截所有错误(包括非崩溃 bug),然后手动上报给bugly

  1. main() {
  2.   AppCatchError().run(App());
  3. }
  4. //全局异常的捕捉
  5. class AppCatchError {
  6.   run(Widget app) {
  7.     // Flutter 框架异常
  8.     FlutterError.onError = (FlutterErrorDetails details) async {
  9.       // 线上环境
  10.       Map map = {};
  11.       map["error"] = details.toString();
  12.       MethodManager.invokeCatchedException(map);
  13.       if (kReleaseMode) {
  14.         Zone.current.handleUncaughtError(details.exception, details.stack!);
  15.       } else {
  16.         // 开发期间 print
  17.         FlutterError.dumpErrorToConsole(details);
  18.       }
  19.       if (EasyLoading.isShow) {
  20.         EasyLoading.dismiss();
  21.       }
  22.       logger.e(details.toString());
  23.     };
  24.     runZonedGuarded(() {
  25.       // 受保护的代码块
  26.       runApp(app);
  27.     }, (error, stack) => catchError(error, stack));
  28.   }
  29.   ///对搜集的 异常进行处理  上报等等
  30.   catchError(Object error, StackTrace stack) {
  31.     logger.e('错误 message:$error,stack: $stack');
  32.     Map map = {};
  33.     map["error"] = "$error########################### stack$stack”;
  34.     // 此处为 flutter 与原生交互 将 error 传给原生 
  35.     MethodManager.invokeCatchedException(map);
  36.     if (EasyLoading.isShow) {
  37.       EasyLoading.dismiss();
  38.     }
  39.   }
  40. }
  1. 原生中接收的代码
  2. if (methodCall.method.equals("postCatchedException")) {
  3.     // 错误日志上传bugly
  4.     String error = methodCall.argument("error");
  5.     CrashReport.postCatchedException(new Throwable(error));
  6. }

此处如果不知道怎么跟原生交互,可以看我其他文章 有详细说明

到这个地方日志上报就完成了,但是这时候会发现 flutter 相关的错误在 bugly 上会是一些特殊符号无法解析出来 就需要解析符号表

5.在 bugly 官网找到符号表相关栏目

6.下载符号表工具(这里下载对应版本的符号表工具)

7.通过文档找到符号表工具使用的方法

java -jar buglyqq-upload-symbol.jar -appid <bugly应用的appid> -appkey <bugly应用的appkey> -bundleid <android app 的包名> -version <android app 的版本> -platform Android -inputSymbol <下载下来的符号表>

8.接下来就是把命令行需要的这些东西都找出来

appid和appkey都是在 buylg 官网第一步创建的应用中可以获取

bundleid在 flutter/android/app/build.gradle文件下的applicationId

version 同上面目录下的versionName

inputSymbol 获取就比较麻烦 在下一步操作

9.先通过命令行获取Engine的 id

10.在flutter_infra中下载对应的符号表解析对照文件

附上地址 https://console.cloud.google.com/storage/browser/flutter_infra_release/flutter;tab=objects?prefix=&forceOnObjectsSortingFiltering=false

11.内容太多 将9 步获取的 id  b20183e040筛选一下 ,就找到对应的符号表了

12.根据实际情况下载对应的包(不知道怎么下载的,看第二步如果配置的是armeabi那就下载第二个,以此类推)

13.下载里面解压出 symbols.zip,就会解压出libflutter.so文件,他就是需要的inputSymbol了

14.最终将刚才获取的那些东西替换成下面然后执行即可

java -jar buglyqq-upload-symbol.jar -appid *** -appkey *** -bundleid *** -version *** -platform Android -inputSymbol /Users/***/Downloads/libflutter.so

15.命令行成功的界面

这样就 ok 了 然后你再去 bugly 的日志上报上面看就能看到 正常的 flutter 的日志了

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/455563
推荐阅读
相关标签
  

闽ICP备14008679号