为了能快速并准确地定位应用发生Native Crash 的代码位置,基调听云使用符号表文件对应用崩溃堆栈进行解析和还原,示例如下。
原堆栈:
还原后堆栈:
还原后堆栈符号表工具nbs.newlens.so.parser.jar,是基调听云App 提供给开发者提取符号表文件的工具。
提取符号表需要符号表工具和Debug SO 文件(具有调试信息的SO 文件)。
符号表工具使用tingyun.propertises 文件作为配置文件,需要配置以下信息:
authKey=*基调听云API 账号授权Key,由报表系统生成*
appKey=*基调听云AppKey*
选项 | 说明 |
---|---|
-i | 指定so文件夹路径 |
-s | 指定配置文件( 默认读取JAR 包目录下的tingyun.propertises文件) |
-u | 上传开关 |
使用符号表工具的JAR 包生成符号表文件的命令如下:
java -jar nbs.newlens.so.parser.jar -i E:\JNIDemo\jniLibs
生成的符号表文件NewlensSymbol.zip 位于符号表工具目录下。
注意:基调听云上传符号表文件仅支持zip 格式,-i 参数请指定生成SO 文件夹的路径。该路径一般默认为
app\build\intermediates\cmake\debug\obj,也可以通过CMakeLists.txt 文件配置输出到其他目录。
基调听云提供了三种方式上传符号表文件。
使用符号表工具的JAR包生成符号表文件,并自动上传的命令如下:
java -jar nbs.newlens.so.parser.jar -i E:\JNIDemo\jniLibs -u -s
E:\JNIDemo\tingyun.properties
报表中选择“崩溃”模块,在“崩溃历史记录列表”打开“Nativa symbol 文件管理”。
上传NewlensSymbol.zip 文件即可。
基调听云默认在release 编译时于创建 tingyun 目录生成符号表并自动上传。
、
编译时有如下日志输出说明上传成功。
[D]formatUrl:https://mobile-symbol-upload.tingyun.com/symbol/authkey/xxxxxx/appkey/xxxxxxxx
[I]uploadSymbol result:{
"status" : "SUCCESS",
"message" : "result: file name: NewlensSymbol&arm64-v8a&libcater-lib.symbol;builds : null;SHA-1 : 06a5c343b351a2f7ce5c6003df9df109"
}
若需要在debug 时生成符号表并上传,需在项目app 目录下的build.gradle 文件中,添
加配置。
```
newlensExt{ soDebugOpen = true }
若不希望生成并上传符号表,需在项目app 目录下的build.gradle 文件中,添加配置:
newlensExt{
//默认开启,若置为false,则不生成native 符号表,不上传mapping 文件
symbolUploadEnabled = false
}
基调听云SDK 提供了两种方式上传mapping 文件。
报表中选择“崩溃”模块,在“崩溃历史记录列表”打开“dSYM/Mapping 文件管理”。
找到所需版本,并上传本地mapping 文件即可。
说明:若您的项目不存在tingyun.properties 文件,需在项目app 目录及根目录下新建该文件。
在tingyun.properties 文件中配置。
authKey=*基调听云API 账号授权Key,由报表系统生成*
appKey=*基调听云AppKey*
mapping_file_auto_upload=true
开启混淆器。
mapping_file_auto_upload 控制开关只有在启用混淆器的时候才会生效,开启控制开关后,
基调听云SDK 会将本地目录下的mapping 文件自动上传到基调听云服务器。若未开启混淆器则该配
置项不生效。
编译时有如下日志输出说明上传成功。
[NBSAgent.info] Successfully sent mapping.txt.
[NBSAgent.info] send mapping responseCode is 200
[NBSAgent.info] { "status" : "SUCCESS", "message" : "result: file name: mapping.txt;builds : bd51a61c-313c-4d36-b65e-7612f1202487;SHA-1 : null"}