配置自动上传符号表

  • Bugtags 通过 gradle 插件支持自动上传符号表

  • Android 的符号表,是用来还原 proguard 混淆后的崩溃堆栈。本质是这个文件: project/module/build/outputs/mapping/release/mapping.txt

  • 只有在 android 打包配置的 buildType 中设置 minifyEnabled true, 才会产生 mapping.txt

      buildTypes {
              release {
                  minifyEnabled true 
                  signingConfig signingConfigs.release
                  proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
              }
      }
    
  • 为了减少重复文件的上传,自动上传插件在 module 目录下生成如下文件: project/module/.bugtags.log 进行上传记录,如果上传符号表时发现即将上传的符号表与记录文件中下面四个参数相同:

      variantName
      md5(mapping.txt)
      versionName
      versionCode
    

    则会忽略此处上传。

  • 如果要暂停自动上传符号表,则可以配置 mappingUploadEnabled false

      //应用插件
        apply plugin: 'com.bugtags.library.plugin'
      bugtags {
          appKey "APP_KEY"
          appSecret  "APP_SECRET"
          mappingUploadEnabled false
      }
    
  • Bugtags 支持 beta-online 来切分不同环境,各自有 appKey 和 appSecret,可以这样配置:

    plugin >= v1.2.6

    
      afterEvaluate {
          android.applicationVariants.each { variant ->
              def bugtagsAppKey = null;
              def bugtagsAppSecret = null;
    
              if (variant.name.contains("debug")) {
                  bugtagsAppKey = 'APP_KEY_BETA'
                  bugtagsAppSecret = 'APP_SECRET_BETA'
              } else if (variant.name.contains("release")) {
                  bugtagsAppKey = 'APP_KEY_LIVE'
                  bugtagsAppSecret = 'APP_SECRET_LIVE'
              }
    
              variant.ext.bugtagsAppKey = bugtagsAppKey
              variant.ext.bugtagsAppSecret = bugtagsAppSecret
          }
      }
    
      //请保证 afterEvaluete 和 apply plugin 的先后顺序
      apply plugin: 'com.bugtags.library.plugin'
    
      bugtags {
          trackingNetworkEnabled true
      }
    
  • 有些情况下,APP 具有多个 productFlavor,每一个 productFlavor 的代码有所区别,如果想要分开统计 crash,那就需要在 bugtags 后台创建多个 APP,并在创建配置中,按照 BuildVariant 来输入不同的 appKey 和 appSecret:

    plugin >= v1.2.6

```

android {

    productFlavors {
        pro {

        }
        fre {
        }
    }

    buildTypes {
        debug {
        }
        release {
        }
    }
}

afterEvaluate {
    android.applicationVariants.each { variant ->

        def bugtagsAppKey;
        def bugtagsAppSecret;
        switch (variant.name) {
            case 'proDebug':
                bugtagsAppKey = 'APP_KEY_PRO_BETA'
                bugtagsAppSecret = 'APP_SECRET_PRO_BETA'
                break
            case 'proRelease':
                bugtagsAppKey = 'APP_KEY_PRO_LIVE'
                bugtagsAppSecret = 'APP_SECRET_PRO_LIVE'
                break
            case 'freDebug':
                bugtagsAppKey = 'APP_KEY_FRE_BETA'
                bugtagsAppSecret = 'APP_SECRET_FRE_BETA'
                break
            case 'freRelease':
                bugtagsAppKey = 'APP_KEY_FRE_LIVE'
                bugtagsAppSecret = 'APP_SECRET_FRE_LIVE'
                break
        }

        variant.ext.bugtagsAppKey = bugtagsAppKey
        variant.ext.bugtagsAppSecret = bugtagsAppSecret
    }
}

//请保证 afterEvaluate 和 apply plugin 的先后顺序
apply plugin: 'com.bugtags.library.plugin'

bugtags {
    trackingNetworkEnabled true
}

```
  • 可以通过删除 project/module/.bugtags.log 文件或者其中的内容,使得可以重新上传所有的符号表文件

  • 问题排查

      1.是否有开启 minifyEnabled
    
      2.afterEvaluate 和 apply plugin 的顺序是不是先后顺序
    
      3.afterEvaluate 中的 appkey 和 appsecret 判断是否正确 xxxDebug
    
      4.sdk 是否 >= 1.2.6
    
      6..bugtags.log 文件中,是否已经包含了对应的 mapping 文件(md5 重复的不上传)
    
      7.运行命令是 assembleXXX 或者 build 才会触发上传
    
      排查后,还是不行,请使用如下命令:
      mac:
      ./gradlew clean build --info > bugtags.log
    
      windows:
      gradlew.bat clean build --info > bugtags.log
    
      输出 log 后找客服
    
评论