bugly android z自动上传符号表失败,Android 符号表

2024-02-06 03:30

本文主要是介绍bugly android z自动上传符号表失败,Android 符号表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Bugly Android 符号表配置

介绍

什么是符号表?

符号表是内存地址与函数名、文件名、行号的映射表。符号表元素如下所示:

[]

为什么要配置符号表?

为了能快速并准确地定位用户APP发生Crash的代码位置,Bugly使用符号表对APP发生Crash的程序堆栈进行解析和还原。

举一个例子:

7e31773f1117f296d3d5fc1507f63d2a.png

Bugly提供了自动和手动两种方法配置Android符号表。

自动配置:使用Android Studio插件

插件的配置和使用方法参考文档:Bugly符号表插件使用指南

手动配置

手动配置的流程如下:

符号表工具JAR包(buglySymbolAndroid.jar)

Windows的脚本(buglySymbolAndroid.bat)

Shell脚本(buglySymbolAndroid.sh)

默认符号表配置文件(settings.txt)

符号表工具Android版-使用指南

根据UUID定位Debug SO文件

使用工具生成符号表文件(zip文件)

在页面上传符号表文件

9e5511033e4e2256e16b27811538a6ee.png

其他说明

如果项目只使用了混淆代码 (Proguard),而没有Native工程,只需要直接上传Proguard生成的Mapping文件;

Bugly Android符号表工具2.5.0及以上版本增加了上传功能,并支持Mapping文件的上传;

定位Debug SO文件的方法和工具的使用方法请参考:“符号表工具Android版-使用指南”。

符号表上传接口

Bugly提供了上传符号表的API接口(使用POST方式上传):

https://api.bugly.qq.com/openapi/file/upload/symbol

参数说明

上传接口的参数说明如下:

属性

说明

api_version

API版本,固定为1

app_id

App ID

app_key

App Key

symbolType

符号表类型,Mapping为1,Symbol为3

bundleId

包名(Package)

productVersion

版本号(Version Name)

channel

渠道(channel)

fileName

符号表文件名

file

符号表文件

其中包名、版本号、渠道和符号表文件名需要做URL Encode。

例子:使用Curl上传

使用Curl工具来上传的例子如下:

上传Mapping文件

curl -k "https://api.bugly.qq.com/openapi/file/upload/symbol?app_key=xxx&app_id=9000xxx" --form "api_version=1" --form "app_id=xxxxxx" --form "app_key=xxxxxx" --form "symbolType=1" --form "bundleId=com.demo.test" --form "productVersion=1.0" --form "channel=xxx" --form "fileName=mapping.txt" --form "file=@mapping.txt" --verbose

上传符号表文件(Symbol文件)

curl -k "https://api.bugly.qq.com/openapi/file/upload/symbol?app_key=xxx&app_id=9000xxx" --form "api_version=1" --form "app_id=xxxxxx" --form "app_key=xxxxxx" --form "symbolType=3" --form "bundleId=com.demo.test" --form "productVersion=1.0" --form "fileName=symbol.zip" --form "file=@symbol.zip" --verbose

Debug SO文件

什么是Debug SO文件?

Android平台中,目标文件对应的是SO文件。Debug SO文件是指具有调试信息的SO文件。

为了方便找回Crash对应的Debug SO文件和还原堆栈,建议每次构建或者发布APP版本的时候,备份好Debug SO文件。

如何定位Debug SO文件?

IDE: Eclipse

IDE如果使用Eclipse+NDK,默认情况下,Debug SO文件将位于:

/obj/local//

如下图所示:

6abf99e844dcfff84a1297faf05fca42.png

IDE: Android Sutdio

IDE如果使用Android Sutdio+NDK,默认情况下,Debug编译的Debug SO文件将位于:

//build/intermediates/ndk/debug/obj/local/

而Release编译的Debug SO文件将位于:

//build/intermediates/ndk/release/obj/local/

如下图所示:

a0e0a6e58ab1d49fa6cb8bd4fc4b78b0.png

如何判断是否与Crash匹配?

Bugly v2.0页面

Bugly v1.0还原Crash堆栈时,根据App包名、App版本号、SO文件名和架构来匹配符号表文件。

使用工具上传方式

检查生成符号表文件时输入的SO文件名和架构是否和Crash堆栈的SO文件匹配;

上传时指定的App包名、版本号是否和Crash对应的App包名和版本号匹配。

手动上传方式

检查生成符号表文件时输入的SO文件名和架构是否和Crash堆栈的SO文件匹配;

在版本管理页面下,检查符号表文件是否是在Crash对应App版本(包名和版本)下上传的。

Bugly v2.0页面

Bugly v2.0还原Crash堆栈时,需要根据UUID来匹配符号表文件,因此只有上传的符号表文件的UUID与Crash堆栈的SO文件的UUID一致时,才能准确地对堆栈进行还原。

查看Crash对应的APP的UUID:

崩溃分析 ---> Crash issue ---> 符号表 ---> UUID

f142c09947a6d5c78bfec8f257be04ec.png

如何查看Debug SO文件的UUID?

符号表文件的UUID与Debug SO文件的UUID是一致的,因此可以通过符号表工具生成的符号表文件来查看Debug SO文件的UUID:

生成符号表文件(.zip) ---> 解压符号表文件(.symbol) ---> 使用文本编辑器打开符号表文件

ded797f8b29e713d8dafdc6733d3eb8f.png

其中符号表文件的“SHA-1”信息即Debug SO文件的UUID,亦是符号表文件的UUID,如果文件较大,建议使用“Sublime Text”等文本编辑器来打开符号表文件。

由于Bugly v2.0已采用新的UUID计算规则,为了能正确地匹配Crash堆栈对应的SO文件,请使用2.5.0或以上版本的符号表工具。

找不到Crash对应的Debug SO文件?

如果本地已经无法找到Crash对应的符号表文件或者Debug SO文件了,但还能找回Crash对应的APP版本的Native工程代码,建议尝试重新用NDK编译出Debug SO文件并用符号表工具生成符号表文件。

如果连Native工程代码也无法找回了,那就真的无法还原这个Crash堆栈了。

为了防止出现这种情况,建议每次构建或者发布APP版本的时候,一定要备份好Debug SO文件!

这篇关于bugly android z自动上传符号表失败,Android 符号表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/683010

相关文章

JAVA实现Token自动续期机制的示例代码

《JAVA实现Token自动续期机制的示例代码》本文主要介绍了JAVA实现Token自动续期机制的示例代码,通过动态调整会话生命周期平衡安全性与用户体验,解决固定有效期Token带来的风险与不便,感兴... 目录1. 固定有效期Token的内在局限性2. 自动续期机制:兼顾安全与体验的解决方案3. 总结PS

linux部署NFS和autofs自动挂载实现过程

《linux部署NFS和autofs自动挂载实现过程》文章介绍了NFS(网络文件系统)和Autofs的原理与配置,NFS通过RPC实现跨系统文件共享,需配置/etc/exports和nfs.conf,... 目录(一)NFS1. 什么是NFS2.NFS守护进程3.RPC服务4. 原理5. 部署5.1安装NF

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

在Android中使用WebView在线查看PDF文件的方法示例

《在Android中使用WebView在线查看PDF文件的方法示例》在Android应用开发中,有时我们需要在客户端展示PDF文件,以便用户可以阅读或交互,:本文主要介绍在Android中使用We... 目录简介:1. WebView组件介绍2. 在androidManifest.XML中添加Interne

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired