- 一、API 版本号说明
- 二、java API 概述
- 三、java API 详述
- 1. CrashApi
public static CrashApi createInstanceEx(Context context, String appId, boolean printStackInfos)
public static CrashApi createInstanceEx(Context context, String appId, boolean printStackInfos, Bundle args)
public static CrashApi createInstanceEx(Context context, String appId, boolean printStackInfos, Bundle args, ICrashClient client)
public VersionInfo(VersionInfo info)
- 1. CrashApi
- 2. CustomInfo
- 3. VersionInfo
- 4. ExitType
- 5. LogType
- 四、补充说明
本文中 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 日志、崩溃统计、崩溃日志上传等功能。
SDK 会自动加载 libcrashsdk.so,若加载失败(例如找不到 libcrashsdk.so,或者 libcrashsdk.so 与 crashsdk.jar 版本不对应),则不会启用 native 和 unexp 日志。
unexp 日志默认只在主进程中被启用,若其它服务进程也需要启用 unexp 日志,请查看使用其重载接口 CrashApi createInstanceEx(Context context, String appId, boolean printStackInfos, Bundle args)。
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
修改默认选项和行为。
参数
前三个参数同 CrashApi createInstanceEx(Context context, String appId, boolean printStackInfos);
第四个参数 Bundle
args
中的值可为 CustomInfo 和 VersionInfo 中定义的任何成员变量,put 到 Bundle 的 key 为 CustomInfo 和 VersionInfo 中定义的变量名字符串、value 的类型必需与变量的实际类型相同,否则会抛出 IllegalArgumentException 异常。CustomInfo 中部分自定义参数不支持修改,具体见 CustomInfo 类中各成员变量的说明。
代码示例:
Bundle args = new Bundle();
args.putBoolean("mDebug", true);
args.putString("mVersion", ${APP_VERSION}); // 注意:put[Type] 和成员变量类型保持一致
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
注册事件回调。
参数
前四个参数同 CrashApi createInstanceEx(Context context, String appId, boolean printStackInfos, Bundle args);
第五个参数 ICrashClient
client
为注册的事件回调对象。
版本
2.1.0 增加。
- 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][] 可以按位或。
四、补充说明
1. 注意事项
1). CrashApi.registerInfoCallback 增加回调,对于每类崩溃日志有最大次数限制,具体见 registerInfoCallback API 的说明;
2). 对于 native 崩溃 ICrashClient 的 onLogGenerated、onCrashRestarting、onGetCallbackInfo 回调,都是在 fork 出的不同的子进程中回调回来的,如果要在这些回调里面做读写文件相关操作(如统计等),需要重新从文件读取最新内容,且在回调末尾写回文件,不然可能会引起内容丢失;
3). 使用自定义崩溃日志文件名时,可能导致较早的稳定崩溃(默认日志文件名中会包含 ucebu 字样)无法上传而丢失,以至不知道有此类崩溃的存在;另外,使用自定义崩溃日志文件名,在上传日志时,崩溃日志类型不会被正确识别,从而影响到 LOG_XXX
相关的统计数据;
4). ucebu 使用服务进程上传,需要在 AndroidMenifest.xml 中申明,如下:
<manifest ...>
<application ...>
<service android:name="com.uc.crashsdk.CrashLogFilesUploader" android:process=":TProcess" />
</application>
</manifest>
2. 补充说明
1). SDK 代码已经混淆过,不需要再混淆。在混淆规则中,需要保留 com.uc.crashsdk 包名下所有的类名和方法名,如下:
-keep class com.uc.crashsdk.** { *; }
-keep interface com.uc.crashsdk.** { *; }
如果只用到了 SDK 的部分 API,想通过混淆去掉无用的代码,减少包 size,可改为如下:
-keep class com.uc.crashsdk.JNIBridge { *; }
-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). 关于统计项的问题,需要补充说明一下:
EXCEPTION_ALL_TIMES 和 EXCEPTION_FG_TIMES 是指异常退出次数,这里面包含有生成日志和没生成日志的次数;
其它所有的
JAVA_XXX
,NATIVE_XXX
,UNEXP_XXX
都是统计已经生成的日志条数。其主要是为了与收集上来的崩溃日志条数作对比用;推论:EXCEPTION_FG_TIMES >= JAVA_FG_TIMES + NATIVE_FG_TIMES + UNEXP_FG_TIMES
推论:后台异常退出次数 bgCrashTimes = EXCEPTION_ALL_TIMES - EXCEPTION_FG_TIMES, bgCrashTimes >= JAVA_BG_TIMES + NATIVE_BG_TIMES + UNEXP_BG_TIMES。
(本文完)