MTA支持Java和Native异常捕获,其中Java Crash模块默认集成在MTA主体jar包中,Native Crash(即c/c++或so的异常捕获)需要额外添加so文件,并调用API启用,若您的工程涉及到Native编码,建议打开上Native Crash模块,否则,不需要额外添加这部分的文件。
Java Crash:使用新的mta 3.x.x.jar替换老版。
Native Crash:libMtaNativeCrash_v2.so,删除老的ibMtaNativeCrash.so,需要注意不同ABI的文件存放,具体见下。
MTA Native Crash支持当前Android系统所支持的所有架构:
armeabi
armeabi-v7a
arm64–v8a
x86
x86_64
mips
mips64
在集成过程中,一定要注意不同架构SO库文件的存放,否则可能会引起问题,总的原则是:只保留工程所支持的架构SO,不支持的SO千万不要额外导入。下面举例说明。
集成前:假设libMyCustom.so为实际工程的SO文件,所支持架构列表只有armeabi、armeabi-v7a、arm64-v8a三种。
集成后:根据只保留工程所支持SO架构的原则,那么只需要把Mta Native Crash对应的架构下的so文件复制到工程对应的目录中即可,即MTA armeabi的libMtaNativeCrash_v2.so复制到工程对应的armeabi目录下,注意一定要匹配,保持支持的架构目录的so文件一致,而不支持的架构不需要添加,一个集成带native crash模块的MTA后的工程示例见下图。
1.2. 工程配置
主要的配置参考MTA的接入配置功能,下面列举AndroidMenifest.xml文件的配置部分。
……工程application指标的的其它配置
android:name="TA_APPKEY"
android:value="A91LM44JGFLV" />
android:name="InstallChannel"
android:value="应用宝" />
android:name="com.tencent.mid.api.MidProvider"
android:authorities="您的APP包名.TENCENT.MID.V3"
android:exported="true" >
1.3. application配置
StatService.setContext(app);
// 这个是开启Mta的统计功能
StatService.registerActivityLifecycleCallbacks(app);
StatCrashReporter crashReporter = StatCrashReporter.getStatCrashReporter(app);
// 开启异常时的实时上报
crashReporter.setEnableInstantReporting(true);
// 开启java异常捕获
crashReporter.setJavaCrashHandlerStatus(true);
// 开启Native c/c++,即so的异常捕获
// 请根据需要添加,记得so文件
crashReporter.setJniNativeCrashStatus(true);
// crash时的回调,业务可根据需要自选决定是否添加
crashReporter.addCrashCallback(new StatCrashCallback() {
@Override
public void onJniNativeCrash(String tombstoneString) {
// native dump内容,包含异常信号、进程、线程、寄存器、堆栈等信息
// 具体请参考:Android原生的tombstone文件格式
log("MTA StatCrashCallback onJniNativeCrash:\n" + tombstoneString);
}
@Override
public void onJavaCrash(Thread thread, Throwable ex) {
//thread:crash线程信息
// ex:crash堆栈
log("MTA StatCrashCallback onJavaCrash:\n", ex);
}
});