本文中 CrashSDK 都将被简称为 SDK。

一、API 版本号说明

SDK 版本号由 4 位数组成:第 1 位为主版本号,第 2 位为子版本号,第 3 位和第 4 位为辅助版本号。

  • 第 1 位版本号将在 SDK 发生重大变动时升级;

  • 第 2 位版本号将在 SDK API 发生变化时升级;

  • 第 3 位版本号将在 SDK 进行了优化更新后升级;

  • 第 4 位版本号在每次重新打包时升级。

二、java API 概述

SDK 的 API 全在包名 com.uc.crashsdk.export 下。该包名下所有的类或接口如下:

名称 类型 简介
CrashApi class 主接口。包含初始化、日志内容自定义、日志上传、崩溃统计等接口。
ExitType class 退出类型常量。包含 APP 上次退出的各种类型,比如:正常退出、前台未捕获崩溃、前台捕获崩溃、后台未捕获崩溃、后台捕获崩溃等。
LogType class 日志类型常量。定义了 SDK 内置崩溃日志类型,如 JAVA, NATIVE, UNEXP等。其作为部分 API 的参数或返回值使用。

各接口具体的介绍见下节。

三、java API 详述

1. CrashApi

SDK 提供了简单的 createInstanceEx 系列接口快速接入,会按照默认逻辑处理好所有事情,一行代码拥有整个崩溃处理系统,开发者不必再关注其它事宜。

public static CrashApi createInstanceEx(Context context, String appId, boolean printStackInfos)

创建 SDK 实例及初始化。CrashApi 为单例模式,每个进程只能创建一个实例,多个进程的实例之间互不影响。
使用该接口初始化 SDK,将启用 java, native 和 unexp 日志、崩溃统计、崩溃日志上传等功能。

CrashApi 实例的创建,建议在 Application.onCreate) 中调用,这样所有的服务进程也将共用该初始化的代码,即写一句代码可初始化所有进程。

  • 参数
类型 名称 说明
Context context Android Application Context 设备上下文。
String appId 产品(APP) 在啄木鸟系统中申请的 AppID。
boolean printStackInfos 是否在生成日志的同时打印日志内容到 logcat。
  • 返回值

返回创建的 CrashApi 实例。如果先前已经创建过,不会重复创建,返回之前创建的实例。

  • 异常
异常类型 说明
NullPointerException context 为 null 时,抛出此异常。
IllegalArgumentException 从 context 中获取 Application Context 为 null 时,抛出该异常。
  • 版本

2.1.0 增加。

public static CrashApi createInstanceEx(Context context, String appId, boolean printStackInfos, Bundle args)

同 CrashApi createInstanceEx(Context context, String appId, boolean printStackInfos)。

该初始化接口可通过参数 Bundle args 修改默认选项和行为。

  1. 代码示例:
  1. Bundle args = new Bundle();
  2. args.putBoolean("mDebug", true);
  3. args.putString("mVersion", ${APP_VERSION}); // 注意:put[Type] 和成员变量类型保持一致
  4. CrashApi.createInstanceEx(context, ${APPID}, true, args);

另外,args 还可以 put 下面四个特殊参数,若不指定这些项,则它们为下面所给出的默认值:

类型 名称 默认值 说明
boolean enableJavaLog true 是否启用 java 崩溃日志
boolean enableNativeLog true 是否启用 native 崩溃日志
boolean enableUnexpLog 主进程为true,其它进程为 false 是否启用 unexp 崩溃日志
int uploadLogDelaySeconds 15 初始化多少秒后开始自动上传日志(仅主进程),该值必须 > 0

当 enableNativeLog 或 enableUnexpLog 设为 true 时,SDK 会自动加载 libcrashsdk.so,若加载失败,则不会启用 native 和 unexp 日志。

  • 版本

2.1.0 增加。

public static CrashApi createInstanceEx(Context context, String appId, boolean printStackInfos, Bundle args, ICrashClient client)

同 CrashApi createInstanceEx(Context context, String appId, boolean printStackInfos, Bundle args)。

该初始化接口可通过参数 ICrashClient client 注册事件回调。

2.1.0 增加。

  1. VersionInfo
    程序的版本号和打包流水号信息。SDK 初始化时传入。

在 SDK 初始化完成后,可调用 CrashApi.updateVersionInfo 修改。

类型 名称 默认值 版本 可修改 说明
String mVersion null 1.3.0 增加 是 APP 的版本号。为 null 时将自动获取。将被作为崩溃日志文件名的一部分。CrashSDK_1.0.0.1_150102001122_GT-I9300_4.1.2_353537050399918_20150421161933_fg_ucebujava.log
String mSubVersion null 1.3.0 增加 是 APP 的子版本号,用于进一步描述当前版本。为 null 时将设置为 “release”。
String mBuildId null 1.3.0 增加 是 apk 包的唯一标识,格式为[%y%m%d %H%M%S](e.g. 20190101120101,表示为 190101120101)。为 null 时将自动获取 classes.dex 的 CRC32 表示。将被作为崩溃日志文件名的一部分。CrashSDK1.0.0.1150102001122_GT-I9300_4.1.2_353537050399918_20150421161933_fg_ucebujava.log

构造函数:

public VersionInfo()

默认构造函数。

  • 版本

1.3.0 增加。

public VersionInfo(VersionInfo info)

复制构造函数。

  • 参数
类型 名称 说明
VersionInfo info 将要被复制的 VersionInfo
  • 版本

1.3.0 增加。

2. CustomInfo

该类提供了外部对 SDK 的部分行为或内容进行自定制的能力。自定制功能主要是针对不同的产品(APP)需求,或者不同版本(debug版、灰度版、发布版等)进行不一样的设置。

“可修改“为”是“的选项,可以在 SDK 初始化完成后,调用 CrashApi.updateCustomInfo 修改。

下面的配置中,除个别配置可能需要在发布版时修改外,基本都可以使用默认值。具体见 SDK 的 demo 示例代码。

类型 名称 默认值 版本 可修改 说明
String mAppId “CrashSDK” 1.3.0 增加 是 崩溃日志文件名前缀。如:CrashSDK_1.0.0.1(150102001122)_GT-I9300_4.1.2_353537050399918_20150421161909_fg_jni.log 中的 “CrashSDK”
String mJavaCrashLogFileName null 1.3.0 增加 是 java 崩溃日志文件名。如果为 null 或 “”,则使用 SDK 定义的默认文件名,如:CrashSDK1.0.0.1(150102001122)_GT-I9300_4.1.2_353537050399918_20150421162002_fg__java.log
String mNativeCrashLogFileName null 1.3.0 增加 是 native 崩溃日志文件名。如果为 null 或 “”,则使用 SDK 定义的默认文件名,如:CrashSDK1.0.0.1(150102001122)_GT-I9300_4.1.2_353537050399918_20150421161909_fg__jni.log
String mUnexpCrashLogFileName null 1.3.0 增加 是 unexp 崩溃日志文件名。如果为 null 或 “”,则使用 SDK 定义的默认文件名,如:CrashSDK1.0.0.1(150102001122)_GT-I9300_4.1.2_353537050399918_20150421112008_fg__unexp.log
String mTagFilesFolderName “crashsdk/tags” 1.3.0 增加 否 SDK一些标识文件、统计文件等存放目录名,可为多级目录,目录不存在时会自动创建。SDK 将在程序安装目录下创建相应的结构。最终目录为 context.getApplicationInfo().dataDir + "/" + mTagFilesFolderName。
String mCrashLogsFolderName “crashsdk/logs” 1.3.0 增加 否 崩溃日志生成目录,可为多级目录,目录不存在时会自动创建。SDK 将在程序安装目录下创建相应的目录结构。最终目录为 context.getApplicationInfo().dataDir + "/" + mCrashLogsFolderName。
String mLogsBackupPathName null 2.0.0 增加 否 在打开 mBackupLogs开关时,日志生成完成后的备份位置。主要用于防止日志上传后被删除,或者本地测试时,由于手机没有 root 而无法查看日志。设置为 null 或 “” 时,将备份到 /sdcard/ + mCrashLogsFolderName 中。(2.0.0 之前的版本,未提供该设置项,默认备份到 /sdcard/ + mCrashLogsFolderName 中)
int mMaxCrashLogFilesCount 15 1.3.0 增加 是 允许保留在崩溃日志目录 mCrashLogsFolderName 下最大的崩溃日志条数。在生成日志前,如果发现崩溃日志文件数达到限制的条数,就会删除最早生成的那条崩溃日志。每删除一条崩溃日志,统计项 CrashStatKey.LOG_ABANDONED_FILE 和 CrashStatKey.LOG_ABANDONED_CRASH_FILE 都会加 1。
int mMaxCustomLogFilesCount 10 1.5.0 增加 是 允许保留在崩溃日志目录 mCrashLogsFolderName 下最大的自定义日志数。在生成自定义日志前,如果发现自定义日志文件数达到限制,就会删除最早生成的那个自定义日志。每删除一条自定义日志,统计项 CrashStatKey.LOG_ABANDONED_FILE 和 CrashStatKey.LOG_ABANDONED_CUSTOM_FILE 都会加 1。
int mMaxJavaLogcatLineCount 1500 1.3.0 增加 是 java 崩溃日志中,获取 logcat 的最大行数。
int mMaxNativeLogcatLineCount 3000 1.3.0 增加 是 native 崩溃日志中,获取 logcat 的最大行数。
int mMaxUnexpLogcatLineCount 500 1.3.0 增加 是 unexp 崩溃日志中,获取 logcat 的最大行数。
int mUnexpDelayMillSeconds 60*1000 1.3.0 增加 否 在 CrashApi.crashSoLoaded 调用后,延迟多少毫秒(ms) 检查生成 unexp 日志。
int mUnexpSubTypes UNEXP_KNOWN_REASON 2.1.0 增加 是 为 LogType 中定义的 UNEXP_ 中的一个或多个常量按位或。可控制只生成因 ANR、killProcess、exit、low memory 等已知原因中的一个或多个导致 unexp 崩溃的 unexp 日志,其它原因的 unexp 崩溃则不生成 unexp 日志。该开关可根据 APP 实际情况只生成有意义的 unexp 日志。默认情况下只生成已知原因的 unexp 日志。
boolean mBackupLogs false 2.0.0 增加 是 是否生成完崩溃日志后,将未压缩和加密的文件拷贝一份到 mLogsBackupPathName 中,以防止日志上传后被删除,本地开发时找不到崩溃日志。日志备份路径的说明见 mLogsBackupPathName。
boolean mUploadUcebuCrashLog false 1.3.0 增加 否 是否在初始化 SDK 时,扫描崩溃日志目录 mCrashLogsFolderName,判断是否包含 ucebu 类型的崩溃日志,若有,则上传。启用该功能后,如果发现有 ucebu 类日志,则会启动一个 Service 子进程,并只上传 ucebujni 和 ucebujava 两类崩溃日志。
注意:设为 true 的同时,需要在 AndroidManifest.xml 中申明服务com.uc.crashsdk.CrashLogFilesUploader,具体见补充说明。
ucebu 的含义是:uc error before upload, 即日志上传(调用 CrashApi.uploadCrashLogs)之前出现的崩溃。这类崩溃时机比较早,如果是稳定崩溃,则日志永远没有机会被上传。开启此功能则可保证这类日志也能收集到。
boolean mSyncUploadSetupCrashLogs true 1.9.1 增加 是 是否同步上传主进程初始化过程中产生的崩溃日志。开启该选项时,如果 SDK 检测到主进程发生崩溃,在生成完该崩溃日志后,SDK 会尝试立即将崩溃日志上传(以防止该场景下的稳定崩溃收集不到)。该开关仅在 java 和 native 崩溃中生效,unexp 和自定义日志无效。SDK 判断主进程的条件为:Package Name 与 /proc/self/cmdline 中的进程名相等。
boolean mOmitJavaCrash false 1.5.0 增加 是 是否捕获 java 异常,但不生成崩溃日志。开启或关闭该开关,崩溃统计都将依旧正常进行。该选项一般通过动态修改来开启,主要目的是为了当 APP 自己不收集旧版本的崩溃日志时,也不让系统知道 APP 出现了崩溃。
boolean mOmitNativeCrash false 1.5.0 增加 是 是否捕获 native 崩溃信号,但不生成崩溃日志。开启或关闭该开关,崩溃统计都将依旧正常进行。该选项一般通过动态修改来开启,主要目的是为了当 APP 自己不收集旧版本的崩溃日志时,也不让系统知道 APP 出现了崩溃。
boolean mDumpUserSolibBuildId true 1.7.2 增加 是 是否在 native 崩溃日志中 dump 所有已加载的用户的 .so 文件的 build id。build id 可以做为 .so 文件的唯一标识,以区分不同版本。在 so 编译时增加参数 -Wl,--build-id=sha1 即可使编译出的 .so 文件带有 build id 信息。
boolean mAutoDeleteOldVersionStats true 1.8.0 增加 是 是否在发现 APP 当前的版本与上次运行时的版本不一致时,清除所有的崩溃统计数据。
版本是否一致,是根据版本号 VersionInfo.mVersion、子版本号 VersionInfo.mSubVersion、打包流水号 VersionInfo.mBuildId 判断,任何一个不一样,都会认为是不同版本。
boolean mZipLog false 1.3.0 增加 是 是否在生成完崩溃日志后,使用 gz 算法压缩崩溃日志。压缩成功后,原日志被删除;压缩失败,原日志将保留。
String mZippedLogExtension “.gz” 1.3.0 增加 是 成功压缩后的崩溃日志文件名后缀。
可为空字符串 “”
int mLogMaxBytesLimit 1024*1024 1.3.0 增加 是 生成日志时,每个日志允许写入的最大字节数。 当达到指定的字节数时,会将剩余的全部丢弃。日志的总长度、丢弃字节数等信息,在日志最后会有记录。
对 JAVA, NATIVE, UNEXP 日志都有效;为 <= 0 的值时,表示不限制。
int mLogMaxUploadBytesLimit 800*1024 1.3.0 增加 是 在上传崩溃日志时,上传的单个日志允许的最大字节数。超过此限制时,将放弃上传该日志并直接删除,同时将统计项 CrashStatKey.LOG_LARGE_FILE 加 1 。其对所有类型的日志有效。为 <= 0 的值时,表示不限制。
long mMaxUploadBytesPerDay 1.5*1024*1024 1.3.0 增加 是 每24小时内,允许上传日志总共的最大字节数。超过时,将放弃日志的上传,日志将保留在磁盘;超过 24 小时后,再次调用上传接口时,再上传日志。为 < 0 的值时,表示不限制。
每次尝试上传发现达到该限制时,统计项 CrashStatKey.LOG_UPLOAD_LIMIT 和 CrashStatKey.LOG_UPLOAD_BYTES_LIMIT都会加 1。
int mMaxUploadCrashLogCountPerDay 20 1.5.0 增加 是 每 24 小时内上传的最大崩溃日志条数。
每次尝试上传发现达到该限制时,统计项 CrashStatKey.LOG_UPLOAD_LIMIT 和 CrashStatKey.LOG_UPLOAD_CRASH_LIMIT都会加 1。
int mMaxUploadCustomLogCountPerDay 20 1.5.0 增加 是 每 24 小时内上传的最大自定义日志条数。
每次尝试上传发现达到该限制时,统计项 CrashStatKey.LOG_UPLOAD_LIMIT 和 CrashStatKey.LOG_UPLOAD_CUSTOM_LIMIT 都会加 1。
int mMaxCustomLogCountPerTypePerDay 6 1.5.0 增加 是 每 24 小时内每种自定义类型的日志允许生成的最大条数。
int mCrashRestartInterval -1 1.3.0 增加 是 崩溃生成日志后,两次自动重启间隔时间,单位为秒。-1 表示崩溃生成日志后,不自动重启; n > -1 时,表示崩溃后,只要与上次崩溃重启时间间隔 > n 秒,就会重启,否则不重启。
boolean mCallJavaDefaultHandler false 1.4.0增加 是 是否在 SDK 处理完 java 异常且生成完 java 崩溃日志后,将异常信息通知给 SDK 初始化之前,其他人(系统)注册的 UncaughtExceptionHandler。
boolean mCallNativeDefaultHandler false 1.4.0增加 是 是否在 SDK 处理完 native 崩溃信号且生成完 native 崩溃日志后,将崩溃信号通知给 SDK 初始化之前,其他人(系统)注册的信号处理函数。
boolean mDumpHprofDataForJavaOOM false 1.5.0 增加 是 是否在出现 java OOM 崩溃时,生成 hprof 文件到 /sdcard/+ mCrashLogsFolderName。
建议仅 monkey 或本地开发时打开,SDK 不提供上传该文件的功能。
boolean mRenameFileToDefaultName false 1.5.0 增加 是 是否重命名指定格式([日志类型]_[自定义的日志去重信息]_[文件扩展名].crashsdk)日志文件名为 SDK 统一的格式(如 CrashSDK_1.0.0.1_150102001122_HM-NOTE-1LTE_4.4.4_[自定义的日志去重信息]_20160222155412_fg_[日志类型].[文件扩展名])。
日志目录下满足正则表达式 ([^_]+)_([^_]+)_([^_]+)\\.crashsdk的所有日志,都会被重命名成 SDK 标准的日志文件名。
每重命名一条日志,统计项 CrashStatKey.LOG_RENAMED_COUNT 都会加 1。
int mUnexpInfoUpdateInterval 3 * 60 1.7.0 增加 是 自动更新当前运行时间、内存等信息的时间间隔,单位为秒(s)。该信息将在出现 unexp 崩溃时,被写入到 unexp 日志中。设置为 <= 0 时,将禁用自动更新;在同时启用 unexp 统计和 unexp 崩溃日志时才会自动更新;当 APP 切后台后,会停止更新(在切后台后,最多还会自动更新一次)。除自动更新外,可调用 CrashApi.updateUnexpInfo 手动更新。
boolean mOverrideLibcMalloc false 1.3.0 增加 否 是否接管 libc.so 的内存申请和释放函数,仅对 android 4.x 有效。启用该功能后,可以在 native 崩溃日志中记录崩溃前,申请内存失败时的申请大小和调用栈。另外,根据经验,启用该功能,可以让一些 native 崩溃日志的崩溃栈更完整。不过开启该选项会引起一些不可解决的多线程崩溃问题,建议仅在 debug 版时打开。
int mReservedJavaFileHandleCount 15 1.3.0 增加 否 预留的 java 文件句柄个数。防止文件句柄泄漏时,无法生成 java 崩溃日志的问题。不建议对此默认值进行修改。
int mReservedNativeFileHandleCount 10 1.3.0 增加 否 预留的 native 文件句柄个数。防止文件句柄泄漏时,无法生成 native 崩溃日志的问题。不建议对此默认值进行修改。
int mFdDumpMinLimit 900 1.8.0 增加 是 在生成 java 和 native 崩溃日志时,如果发现当时打开的文件句柄数大于等于该指定的数值,则将所有打开的文件信息记录到崩溃日志中;如果小于该数值,崩溃日志中只会记录打开的文件总数。
int mThreadsDumpMinLimit 300 2.0.0 增加 是 在生成 java 和 native 崩溃日志时,如果发现当时线程数大于等于该指定的数值,则将所有线程的相关信息记录到崩溃日志中。
long mReservedNativeMemoryBytes 3_1024_1024 1.9.0 增加 否 在 SDK 初始化时,预留的内存大小。该内存将在生成 native 崩溃日志时释放,以防止因内存不足,导致 SDK 无法生成 native 崩溃日志。为 0 时,将不预留内存。
int mDisableSignals 0 2.0.0 增加 否 不注册指定的一个或多个 signal;该整型值的每一个 bit 代表一个 signal,从低到高位计数。例如,不捕获 SIGTERM (signal 15) 则设置为 1 << 14,不捕获 SIGTERM 和 SIGSYS (signal 31) 则设置为 1 << 14 | 1 << 30。
int mDisableBackgroundSignals 1 << 14 2.0.0 增加 是 APP 处于后台时,当指定的 signal 产生时,不捕获该崩溃,即不生成对应的崩溃日志;该整型值的每一个 bit 代表一个 signal,从低到高位计数。例如,后台时不捕获 SIGTERM (signal 15) 则设置为 1 << 14,后台时不捕获 SIGTERM 和 SIGSYS (signal 31) 则设置为 1 << 14 | 1 << 30。默认不捕获后台的 SIGTERM。
boolean mEnableStatReport false 2.0.0 增加 是 是否启用崩溃统计自动上报。开启该开关后,会自动上报启用了崩溃统计的进程的崩溃率相关数据;崩溃率报表可在 Woodpecker 啄木鸟平台上查看。
注意:当开启该开关后,调用 CrashApi.reportCrashStats时,统计数据在回调到接口 ICrashClient.onAddCrashStats 的同时,SDK 也会将它自动上报到啄木鸟平台;同时,不论 ICrashClient.onAddCrashStats 的返回值是什么,各统计项在回调后都会被强制清为 0。
注意:国际版(国外版)请将 mIsInternational 设为 true,否则统计数据可能丢失。
boolean mIsInternational false 2.0.0 增加 是 是否为国际版(国外版)。SDK 会根据该开关选择相应服务器上报崩溃率统计数据。
boolean mAutoDetectLifeCycle true 2.1.0 增加 是 自动根据 Activity 的生命周期获取 APP 的前后台状态。
String mLogTypeSuffix null 1.9.0 增加 是 崩溃日志文件名后缀,字符串中只能包含字母、数字、中划线(‘-‘)、英文句点(‘.’),其它任何字符将被替换为中划线;最大长度为128,超过将被截断;若第一个字符不为 ‘.’,将自动插入一个 ‘.’ 字符在最前面 。所有类型的日志将都应用该后缀;为 null 或 “” 时,将不增加后缀。
例如:设置其为 “andfix” 时,原来的文件名将由 CrashSDK_1.0.0.1(150102001122)_GT-I9300_4.1.2_353537050399918_20150421162002_fg_java.log 变为 CrashSDK_1.0.0.1(150102001122)_GT-I9300_4.1.2_353537050399918_20150421162002_fg_java.andfix.log
boolean mPrintStackInfos false 2.1.0 增加 是 是否在 logcat 中打印生成的日志内容。debug 版中可以打开该开关,方便在 logcat 中看到崩溃栈等信息。
boolean mDebug false 2.1.0 增加 是 是否打开 SDK 的运行日志信息。
boolean mIsUsedByUCM false 1.3.0 增加 是 (浏览器私有配置)是否是浏览器使用 SDK。

构造函数:

public CustomInfo()

默认构造函数。

  • 版本

1.3.0 增加。

public CustomInfo(String appId)
  • 参数
类型 名称 说明
String appId 指定崩溃日志名前缀。对应自定义选项 mAppId。
  • 版本

1.3.0 增加。

public CustomInfo(String appId, boolean backupLogs)
  • 参数
类型 名称 说明
String appId 指定崩溃日志名前缀。对应自定义选项 mAppId。
boolean backupLogs 是否在生成完日志后,拷贝一份明文日志到 sdcard。对应自定义选项 mBackupLogs。
  • 版本

1.3.0 增加。

public CustomInfo(String appId, boolean backupLogs, boolean uploadUcebuCrashLog, boolean overrideLibcMalloc)
  • 参数
类型 名称 说明
String appId 指定崩溃日志名前缀。对应自定义选项 mAppId。
boolean backupLogs 是否在生成完日志后,拷贝一份明文日志到 sdcard。对应自定义选项 mBackupLogs。
boolean uploadUcebuCrashLog 是否在初始化时使用服务进程上传 ucebu 日志。对应自定义选项 mUploadUcebuCrashLog。
boolean overrideLibcMalloc 是否接管 libc 的 malloc 相关函数。对应自定义选项 mOverrideLibcMalloc。
  • 版本

1.3.0 增加。

public CustomInfo(CustomInfo info)

复制构造函数。

  • 参数
类型 名称 说明
CustomInfo info 将要被复制的 CustomInfo
  • 版本

1.3.0 增加。

3. VersionInfo

程序的版本号和打包流水号信息。SDK 初始化时传入。

在 SDK 初始化完成后,可调用 CrashApi.updateVersionInfo 修改。

类型 名称 默认值 版本 可修改 说明
String mVersion null 1.3.0 增加 是 APP 的版本号。为 null 时将自动获取。将被作为崩溃日志文件名的一部分。CrashSDK_1.0.0.1_150102001122_GT-I9300_4.1.2_353537050399918_20150421161933_fg_ucebujava.log
String mSubVersion null 1.3.0 增加 是 APP 的子版本号,用于进一步描述当前版本。为 null 时将设置为 “release”。
String mBuildId null 1.3.0 增加 是 apk 包的唯一标识,格式为[%y%m%d %H%M%S](e.g. 20190101120101,表示为 190101120101) 。为 null 时将自动获取 classes.dex 的 CRC32 表示。将被作为崩溃日志文件名的一部分。CrashSDK1.0.0.1150102001122_GT-I9300_4.1.2_353537050399918_20150421161933_fg_ucebujava.log

构造函数:

public VersionInfo()

默认构造函数。

  • 版本

1.3.0 增加。

public VersionInfo(VersionInfo info)

复制构造函数。

  • 参数
类型 名称 说明
VersionInfo info 将要被复制的 VersionInfo
  • 版本

1.3.0 增加。

4. ExitType

进程上次的退出类型。具体值如下:

类型 名称 常量值 版本 说明
int NORMAL_EXIT 1 1.3.0 增加 正常退出
int FOREGROUND_CAUGHT_CRASH 2 1.3.0 增加 前台崩溃,并且已经被捕获,即已生成 java 或 native 崩溃日志
int BACKGROUND_CAUGHT_CRASH 3 1.3.0 增加 后台崩溃,并且已经被捕获,即已生成 java 或 native 崩溃日志
int UNKNOWN_GROUND_CAUGHT_CRASH 4 1.3.0 增加 未知前后台的崩溃,并且已经被捕获,即已生成 java 或 native 崩溃日志
int FOREGROUND_UNCAUGHT_CRASH 5 1.3.0 增加 前台崩溃,但未被捕获,即没有生成 java 和 native 崩溃日志。但可能会生成 unexp 日志,是否生成 unexp 日志,根据初始化时的设置决定。
int BACKGROUND_UNCAUGHT_CRASH 6 1.3.0 增加 后台崩溃,但未被捕获,没有生成 java 和 native 崩溃日志。也不会生成 unexp 日志。

5. LogType

崩溃日志类型的常量。用于在相关 API 定制崩溃日志内容时,为不同的崩溃日志增加不同的定制内容。同时 [LogType][] 也会作为部分 API 的参数或返回值。

多个 [LogType][] 可以按位或。

类型 名称 常量值 版本 说明
int NATIVE 0x001 1.3.0 增加 native 崩溃日志,可与 [LogType][].[JAVA][], [LogType][].[UNEXP][] 按位或。
int JAVA 0x010 1.3.0 增加 java 崩溃日志,可与 [LogType][].[NATIVE][], [LogType][].[UNEXP][] 按位或。
int UNEXP 0x100 1.3.0 增加 unexp 崩溃日志,可与 [LogType][].[JAVA][], [LogType][].[NATIVE][] 按位或。
int UNEXP_OTHER 0x300 2.1.0 增加 unexp 崩溃日志中未知原因的子类型,可与 [LogType][] 中的其它子类型 UNEXP_ 按位或,用于设置 [CustomInfo][].[mUnexpSubTypes][]
int UNEXP_ANR 0x500 2.1.0 增加 unexp 崩溃日志中未知原因的子类型,可与 [LogType][] 中的其它子类型 UNEXP_ 按位或,用于设置 [CustomInfo][].[mUnexpSubTypes][]
int UNEXP_LOW_MEMORY 0x900 2.1.0 增加 unexp 崩溃日志中未知原因的子类型,可与 [LogType][] 中的其它子类型 UNEXP_ 按位或,用于设置 [CustomInfo][].[mUnexpSubTypes][]
int UNEXP_KILL_PROCESS 0x1100 2.1.0 增加 unexp 崩溃日志中 killProcess() 子类型,可与 [LogType][] 中的其它子类型 UNEXP_ 按位或,用于设置 [CustomInfo][].[mUnexpSubTypes][]
int UNEXP_EXIT 0x2100 2.1.0 增加 unexp 崩溃日志中 exit() 子类型,可与 [LogType][] 中的其它子类型 UNEXP_ 按位或,用于设置 [CustomInfo][].[mUnexpSubTypes][]
int UNEXP_RESTART 0x4100 2.1.0 增加 unexp 崩溃日志中设备重启子类型,可与 [LogType][] 中的其它子类型 UNEXP_ 按位或,用于设置 [CustomInfo][].[mUnexpSubTypes][]
int UNEXP_KNOWN_REASON 0x7d00 2.1.0 增加 unexp 崩溃日志中所有已知原因子类型的集合,用于设置 [CustomInfo][].[mUnexpSubTypes][]
int UNEXP_ALL 0x7f00 2.1.0 增加 unexp 崩溃日志所有子类型的集合,用于设置 [CustomInfo][].[mUnexpSubTypes][]
String NATIVE_TYPE “jni” 1.3.0 增加 native 崩溃日志,为 [ICrashClient][].[onLogGenerated] 中,logType 的常用取值之一。
String JAVA_TYPE “java” 1.3.0 增加 java 崩溃日志,为 [ICrashClient][].[onLogGenerated] 中,logType 的常用取值之一。
String UNEXP_TYPE “unexp” 1.3.0 增加 unexp 崩溃日志,为 [ICrashClient][].[onLogGenerated] 中,logType 的常用取值之一。

四、补充说明

1. 注意事项

1). CrashApi.registerInfoCallback 增加回调,对于每类崩溃日志有最大次数限制,具体见 registerInfoCallback API 的说明;

2). 对于 native 崩溃 ICrashClient 的 onLogGenerated、onCrashRestarting、onGetCallbackInfo 回调,都是在 fork 出的不同的子进程中回调回来的,如果要在这些回调里面做读写文件相关操作(如统计等),需要重新从文件读取最新内容,且在回调末尾写回文件,不然可能会引起内容丢失;

3). 使用自定义崩溃日志文件名时,可能导致较早的稳定崩溃(默认日志文件名中会包含 ucebu 字样)无法上传而丢失,以至不知道有此类崩溃的存在;另外,使用自定义崩溃日志文件名,在上传日志时,崩溃日志类型不会被正确识别,从而影响到 LOG_XXX 相关的统计数据;

4). ucebu 使用服务进程上传,需要在 AndroidMenifest.xml 中申明,如下:

  1. <manifest ...>
  2. <application ...>
  3. <service android:name="com.uc.crashsdk.CrashLogFilesUploader" android:process=":TProcess" />
  4. </application>
  5. </manifest>

2. 补充说明

1). SDK 代码已经混淆过,不需要再混淆。在混淆规则中,需要保留 com.uc.crashsdk 包名下所有的类名和方法名,如下:

  1. -keep class com.uc.crashsdk.** { *; }
  2. -keep interface com.uc.crashsdk.** { *; }

如果只用到了 SDK 的部分 API,想通过混淆去掉无用的代码,减少包 size,可改为如下:

  1. -keep class com.uc.crashsdk.JNIBridge { *; }
  2. -keep public class * extends android.app.Service

不过,有两个点需要特别注意:

  • com.uc.crashsdk.JNIBridge 中所有的方法(包括 protected 和 private)都不能被混淆,某些混淆规则可能会默认将这些外部不可见的方法干掉。请确保 JNIBridge 中所有的方法都不会被混淆;

  • 如果有使用 CrashApi.updateCustomInfo(Bundle) 函数更新 CustomInfo 配置项,那么 CustomInfo 及其所有的成员变量名都不能被混淆,不然会更新失败。

2). 产品标识 CustomInfo.mAppId ,版本信息 VersionInfo.mVersion 和 VersionInfo.mBuildId 中都不能包含字符下划线 _,如果有,请替换为其它字符,比如中划线 -。啄木鸟平台严格使用 _ 去匹配提取字段,如果不符合,就会被舍弃。

3). 关于统计项的问题,需要补充说明一下:


(本文完)