高级功能
原生页面分析
自动集成
1、依赖插件。
打开您工程根目录的build.gradle,在dependencies中添加如下:
classpath "com.umeng.umsdk:apm-plugin:2.0.0"注意:确保您已在工程根目录的build.gradle中添加maven地址。
示例如下:

2、配置插件。
打开您App的build.gradle添加使用插件,在文件头添加代码如下:
apply plugin: 'com.efs.sdk.plugin'同时添加插件的相关配置,代码如下:
efs {
//是否对启动过程进程插桩的开关,如果使用自动集成监控则必须开启,false则不开启启动插件
enable = true
//白名单,支持包力度,必须填写,如填写自己应用的包名
whiteList = [
"您自己的包名路径"
]
}示例如下:
自定义页面阶段数据
概念
如果您想在页面监控过程中加入自定义的监控阶段,比如初始化业务数据(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的自定义内容字符串";
}
});上传后即可在错误详情-自定义字段中「异常发生字段」中展示。

本地调试
接口需在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 = [
"您自己的包名路径"
]
}完整示例:

当使用APM插件进行自动集成时,若您的App中存在BaseActivity等基础类,请按照说明文档进行配置。
自定义启动阶段数据
概念
如果您想在启动监控过程中加入自定义的监控阶段,比如初始化业务数据(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");注意:
在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)会默认兼容新接口。
如遇无法获取到错误崩溃信息或崩溃数据下降明显时:
检查混淆文件中是否添加:
-keep class com.uc.** { *; } -keep class com.efs.** { *; }详细参考本篇集成文档中的混淆设置部分。
如果您还同时使用其它错误收集SDK,请尽量后初始化【友盟+】的相关SDK,同时有些错误收集SDK会在崩溃产生时主动退出当前进程,造成【友盟+】无法收集到错误信息,请避免使用相关SDK。