跳转到主要内容
PRODUCT DOCUMENTS

快速找到所需文档,高效完成接入与排障

浏览产品文档与友盟 Skill,展开目录并阅读正文。

高级功能

原生页面分析

自动集成

1、依赖插件。

打开您工程根目录的build.gradle,在dependencies中添加如下:

classpath "com.umeng.umsdk:apm-plugin:2.0.0"

注意:确保您已在工程根目录的build.gradle中添加maven地址。

示例如下:

image

2、配置插件。

打开您App的build.gradle添加使用插件,在文件头添加代码如下:

apply plugin: 'com.efs.sdk.plugin'

同时添加插件的相关配置,代码如下:

efs {
    //是否对启动过程进程插桩的开关,如果使用自动集成监控则必须开启,false则不开启启动插件
    enable = true
    //白名单,支持包力度,必须填写,如填写自己应用的包名
    whiteList = [
            "您自己的包名路径"
    ]
}

示例如下:1

自定义页面阶段数据

概念

如果您想在页面监控过程中加入自定义的监控阶段,比如初始化业务数据(initData)、初始化页面组件(initView)等,您可以使用自定义页面阶段API加入您自定义的页面阶段数据。

方法

在您自定义阶段开始处添加如下API:

注:1、自定义阶段key长度不可以超过10个字符;2、key的名称不能以"UM_"开头;3、单个页面使用上限为6个,超出则过滤。

        /**
         * 参数1: 当前activity对象
         * 参数2: 自定义阶段key,需要和onTracePageEnd配对使用
         */
        PageManger.onTracePageBegin(MainActivity.this, "initView");

在您自定义阶段结束处添加如下API:

注:自定义阶段key长度不可以超过10个字符;2、key的名称不能以"UM_"开头;3、单个页面使用上限为6个,超出则过滤。

       /**
         * 参数1: 当前activity对象
         * 参数2: 自定义阶段key,需要和onTracePageBegin配对使用
         */
        PageManger.onTracePageEnd(MainActivity.this, "initView");

代码示例:

//监控initView()方法在页面阶段的耗时
PageManger.onTracePageBegin(MainActivity.this, "initView");
initView();
PageManger.onTracePageEnd(this, "initView");

卡顿分析

如您完成common和apm插件的接入,即可使用卡顿分析功能,无需额外其他接入操作

安卓卡顿分析默认的值为超过2秒计为卡顿,如果您需要设置不同的阈值,可以通过下方的API进行设置,API和示例如下:

/** 设置卡顿阈值的API是通过UMCrash.initConfig(Bundle bundle)方法设置,
  * bundle对象中传入对应的key为UMCrash.KEY_PA_TIMEOUT_TIME,
  * 对应的值为您设置的卡顿的阈值
  *
 **/
Bundle bundle = new Bundle();
bundle.putLong(UMCrash.KEY_PA_TIMEOUT_TIME, 2000L);//设置卡顿阈值为2000L
UMCrash.initConfig(bundle);

注意1:阈值限制为大于0且小于等于4,非法值无效SDK取默认值2秒设置;

注意2:需要在初始化之前设置。

卡顿回调(自定义字段)

重要

崩溃、卡顿、自定义异常共用同一个回调接口。回调支持根据崩溃、卡顿、 自定义错误追加不同上下文。

该接口在Android SDK至1.9.8及以上做了升级,如使用升级后的方法,需要删除旧方法。

当卡顿发生时,您可以在该回调方法中返回string类型的业务自定义数据,该数据会写入到卡顿文件中并上传到服务器展示。

注意:卡顿回调中返回string类型数据的长度限制为256个字符。

新方法(适用Android SDK 1.9.8及以上)

UMCrash.registerUMCrashCallback(new IUMCrashCallbackWithType() {
    @Override
    public String onCallback(CrashType type) {
        switch (type) {
            case CRASH_TYPE_NATIVE:
                return "Native 崩溃时register的自定义内容字符串";
            case CRASH_TYPE_JAVA:
                return "JAVA 崩溃时register的自定义内容字符串";
            case CRASH_TYPE_ANR:
                return "ANR 时register的自定义内容字符串";
            case CRASH_TYPE_CUSTOM_LOG:
                return "自定义错误 register的自定义内容字符串";
            case CRASH_TYPE_BLOCK:
                return "卡顿 时register的自定义内容字符串";
            default:
                return null;
        }
    }
});

旧方法(适用Android SDK1.9.8以下)

当崩溃发生时,您可以在该回调方法中返回string类型的业务自定义数据,该数据会写入到崩溃文件中并上传到服务器展示。注意:崩溃回调中返回string类型数据的长度限制为256个字符。

接口示例

UMCrash.registerUMCrashCallback(newUMCrashCallback(){
     @Override
     publicString onCallback(){
         return"卡顿时register的自定义内容字符串";
    }
});

上传后即可在错误详情-自定义字段中「异常发生字段」中展示。

image

本地调试

重要

接口需在SDK初始化之前设置,否则可能不生效。

通过接口开启备份功能,文件将存储在应用沙盒目录/apm_backup_files/文件夹内,卡顿日志为gzip压缩,需解压后查看。

支持的文件类型:

  • Java崩溃

  • Native崩溃

  • ANR

  • 自定义异常

  • 卡顿

接口设置:

UMCrash.enableLogBackup(boolean enable);

默认为false,不备份日志文件。

启动分析

概述

启动监控用于监控、还原C端用户启动您App时的真实感知情况。分类如下:

首次启动:App安装后的第一次启动

冷启动:App进程被"杀死"(包括手动方式、被动系统回收等),再次触发启动的过程

热启动:App进程存活,再次触发启动的过程(包括前后台切换、back退出再次进入等)

其中,首次启动和冷启动会对启动过程中进行启动时间的分解监控,包括初始化时长、构建时长、页面加载时长三个指标,热启动则只监控启动时长,监控指标说明如下:

首次启动或冷启动时长:从Application的attachbaseContext()开始到第一个Activity的onResume()结束;

热启动时长:如果退出时的Activity存在则从恢复该Activity的onRestart()开始到onResume()结束,如果退出时的Activity不存在则从Activity的onCreate()开始到onResume()结束。

集成方式

说明

请务必在此操作前,完成U-APM相关功能组件的集成,此操作仅代表自动集成启动监控的方法。

手动集成方式

手动集成监控即需要您手动将启动监控 SDK 相关 API 预埋到您项目工程中。

1、在自定义 Application 的 attachBaseContext()方法开始添加如下代码:

 LaunchManager.onTraceApp(this, LaunchManager.APP_ATTACH_BASE_CONTEXT, true);

2、在自定义 Application 的 attachBaseContext()方法最后添加如下代码:

 LaunchManager.onTraceApp(this, LaunchManager.APP_ATTACH_BASE_CONTEXT, false);

3、在自定义 Application 的 onCreate()方法最后添加如下代码:

  LaunchManager.onTraceApp(this, LaunchManager.APP_ON_CREATE, false);

4、在启动阶段页面展示的 Activity 的 onCreate()方法开始添加如下代码:

  LaunchManager.onTracePage(this, LaunchManager.PAGE_ON_CREATE, true);

5、在启动阶段页面展示的 Activity 的 onRestart()方法开始添加如下代码:

 LaunchManager.onTracePage(this, LaunchManager.PAGE_ON_RE_START, true);

6、在启动阶段页面展示的 Activity 的 onStart()方法开始添加如下代码:

  LaunchManager.onTracePage(this, LaunchManager.PAGE_ON_START, true);

7、在启动阶段页面展示的 Activity 的 onResume()方法最后添加如下代码:

 LaunchManager.onTracePage(this, LaunchManager.PAGE_ON_RESUME, false);

8、在启动阶段页面展示的 Activity 的 onStop()方法开始添加如下代码:

 LaunchManager.onTracePage(this, LaunchManager.PAGE_ON_STOP, true);

自动集成方式

1、依赖插件。

打开您工程根目录的build.gradle,在dependencies中添加如下:

classpath "com.umeng.umsdk:apm-plugin:1.0.1"

注意:确保您已在工程根目录的build.gradle中添加maven地址。

示例如下:

插件依赖

2、配置插件。

打开您App的build.gradle添加使用插件,在文件头添加代码如下:

apply plugin: 'com.efs.sdk.plugin'

同时添加插件的相关配置,代码如下:

efs {
    //是否对启动过程进程插桩的开关,如果使用自动集成监控则必须开启,false则不开启启动插件
    enable = true
    //白名单,支持包力度,必须填写,如填写自己应用的包名
    whiteList = [
            "您自己的包名路径"
    ]
}

完整示例:

1

重要

当使用APM插件进行自动集成时,若您的App中存在BaseActivity等基础类,请按照说明文档进行配置。

Android启动分析数据异常问题解决方案

自定义启动阶段数据

概念

如果您想在启动监控过程中加入自定义的监控阶段,比如初始化业务数据(initData)、初始化页面组件(initView)等,您可以使用自定义启动阶段API加入您自定义的启动阶段数据。

注意:

说明

1、自定义启动阶段只支持冷启动阶段,热启动不支持

2、如果自定义启动阶段超过SDK所定义的启动结束时间点,则会被SDK丢弃

方法

在您自定义阶段开始处添加如下API:

注:自定义阶段key长度不可以超过10个字符

/**
* 参数1:上下文
* 参数2:自定义阶段key,需要和onTraceEnd配对使用
* 参数3:时间戳
*/
LaunchManager.onTraceBegin(context, "自定义阶段key_2", System.currentTimeMillis());

在您自定义阶段结束处添加如下API:

注:自定义阶段key长度不可以超过10个字符

/**
* 参数1:上下文
* 参数2:自定义阶段key,需要和onTraceBgin配对使用
* 参数3:时间戳
*/
LaunchManager.onTraceEnd(context, "自定义阶段key_1", System.currentTimeMillis());

代码示例:

//监控initData()方法在启动阶段的耗时
        LaunchManager.onTraceBegin(MainActivity.this, "initData", System.currentTimeMillis());
        initData();
        LaunchManager.onTraceEnd(MainActivity.this, "initData", System.currentTimeMillis());

结果验证

集成完成启动App,过滤efs.px.api,可以看到如下启动数据发送成功相关信息,即表示启动数据成功上报。

内存分析

重要

目前U-APM 内存分析模块为专业版的模块,需要付费开通后使用。

内存分析支持OOM异常和内存占用指标。

OOM异常是崩溃分析的子集,因此不单独提供开关配置,是否采集OOM与是否采集Crash同步,如您需要关闭某类崩溃,可通过【集成接入】-【采集开关】调整。

内存占用 需要接入U-APM SDK 1.4.0及以上版本,并建议搭配最新版本Common接入, 如您不希望采集内存占用相关指标,可通过【集成接入】-【采集开关】调整。

App 打通 H5

重要

目前U-APM H5页面分析分析模块为专业版的模块,需要付费开通后使用。

集成友盟JS SDK的网页在嵌入到App后,JS SDK采集到的数据可以通过App端上传到服务器,该功能默认关闭。如果开启,需要在每一个webview loadUrl前调用如下方法:

//以下方法仅支持U-APM Android 1.6.0及以上版本
UMCrash.enableJavaScriptBridge(webView);
webView.loadUrl("https://www.demo.com");

应用内(Webview版)H5集成文档

注意:

在API 16及以下版本中,注入JavaScript有安全漏洞,请谨慎使用。

采集开关

本采集开关适用于开发者在不想使用某个U-APM 监控模块时可灵活自定义采集范围。如目前提供功能都需要采集,则不需要使用该开关,如需要调整某个模块,可按照下面bundle控制说明,选择key进行设置。

自U-APM SDK 1.4.0及以上版本提供该开关,如低于1.4.0版本SDK 需要先升级后再使用。

重要

此API需要在调用初始化方法前使用

/**
*  通过Bundle中指定的key和key的value值(boolean类型)来控制该key对应APM模块的关闭
*/
UMCrash.initConfig(Bundle args)

Bundle控制说明:

key

说明

开关级别

UMCrash.KEY_ENABLE_CRASH_JAVA

用于关闭java crash捕获,默认为true可设置为false进行关闭

二级

UMCrash.KEY_ENABLE_CRASH_NATIVE

用于关闭native crash捕获,默认为true可设置为false进行关闭

二级

UMCrash.KEY_ENABLE_ANR

用于关闭ANR捕获,默认为true可设置为false进行关闭

一级

UMCrash.KEY_ENABLE_PA

用于关闭卡顿捕获,默认为true可设置为false进行关闭

一级

UMCrash.KEY_ENABLE_LAUNCH

用于关闭启动捕获,默认为true可设置为false进行关闭

一级

UMCrash.KEY_ENABLE_MEM

用于关闭内存占用捕获,默认为true可设置为false进行关闭

一级

UMCrash.KEY_ENABLE_NET

用于关闭网络分析捕获,默认为true可设置为false进行关闭

一级

UMCrash.KEY_ENABLE_H5PAGE

用于关闭App与H5打通开关,默认为true可设置为false进行关闭

一级

UMCrash.KEY_ENABLE_POWER

用于关闭电量分析,默认为true可设置为false进行关闭

一级

UMCrash.KEY_ENABLE_CODE_LOG

用于关闭日志回捞,默认为true可设置为false进行关闭

一级

示例

        UMConfigure.setLogEnabled(true);
        Bundle bundle = new Bundle();
        bundle.putBoolean(UMCrash.KEY_ENABLE_CRASH_JAVA, true);
        bundle.putBoolean(UMCrash.KEY_ENABLE_CRASH_NATIVE, true);
        bundle.putBoolean(UMCrash.KEY_ENABLE_ANR, true);
        bundle.putBoolean(UMCrash.KEY_ENABLE_PA, true);
        bundle.putBoolean(UMCrash.KEY_ENABLE_LAUNCH, true);
        bundle.putBoolean(UMCrash.KEY_ENABLE_MEM, true);
        bundle.putBoolean(UMCrash.KEY_ENABLE_H5PAGE, true);
	bundle.putBoolean(UMCrash.KEY_ENABLE_POWER, true);
	bundle.putBoolean(UMCrash.KEY_ENABLE_CODE_LOG, true);
        UMCrash.initConfig(bundle);
        UMConfigure.init(this, "54d32f63fd98c54469***b", "umeng", UMConfigure.DEVICE_TYPE_PHONE, null);

说明

1、一级开关优先级高于二级开关,如果一级和二级同时设置则以一级为准,目前仅崩溃类型有二级开关。

2、由于启动监控早于SDK初始化,所以彻底去掉启动监控还需关闭插件插桩或去掉手动API埋点。

3、卡顿开关关闭情况下不会对卡顿模块进行初始化,并输出如下LOG内容:enablePaLog is false 。

4、启动开关关闭情况下不会对卡顿模块进行初始化,并输出如下LOG内容:enableLaunchLog is false 。

5、内存开关关闭情况下不会对内存模块进行初始化,并输出如下LOG内容: enableMemLog is false 。

// IMSI采集开关接口
// 参数flag: true-允许采集IMSI;false-不允许采集IMSI
public static void enableImsiCollection(boolean flag);

// ICCID采集开关接口
// 参数flag: true-允许采集ICCID;false-不允许采集ICCID
public static void enableIccidCollection(boolean flag);

// IMEI采集开关接口
// 参数flag: true-允许采集IMEI;false-不允许采集IMEI
public static void enableImeiCollection(boolean flag);
接口类:
com.umeng.commonsdk.UMConfigure

注意事项

  • 统计SDK 9.0.4及以上版本(含9.0.4)已经关闭了老版本的错误统计(Java层异常捕获)功能,如果您想继续使用错误统计(Java层异常捕获)功能,请集成并使用umeng-apm-vx.x.x.aar稳定性组件,该组件提供更全面、更强大的异常捕获功能。

  • 原错误统计的开关接口(setCatchUncaughtExceptions API)失效,原错误统计的自定义上报接口(reportError API)会默认兼容新接口。

  • 如遇无法获取到错误崩溃信息或崩溃数据下降明显时:

    1. 检查混淆文件中是否添加:

      -keep class com.uc.** { *; }
      -keep class com.efs.** { *; }

      详细参考本篇集成文档中的混淆设置部分。

    2. 如果您还同时使用其它错误收集SDK,请尽量后初始化【友盟+】的相关SDK,同时有些错误收集SDK会在崩溃产生时主动退出当前进程,造成【友盟+】无法收集到错误信息,请避免使用相关SDK。