1. Java 符号
多个mapping文件请自行处理追加到一个文件中,最终命名为mapping.txt,并打包成zip文件,如果同时包含so符号,可以把so文件打包在一起。
2. Android so库
保证符号表的so文件与发布的so文件同名,so压缩前超过100MB的,需要向啄木鸟申请资源。
如果一个版本里包含同文件名,不同架构的so,可以压缩到不同的目录中,反符号化时需要通过buildid去关联;
建议编译时使用-g参数,带上debug信息,崩溃堆栈可以解析到代码行级,实际发布时,再使用strip命令去掉调试信息;如果不带debug信息,则只能定位到函数名级
下列情况下,需要so文件带有buildid
- 不同CPU架构的so文件名一样,放在不同的路径下
同一个应用版本里,可能有多个版本的so库,使用了动态加载的技术
如何生成带buildid的so,请检查编译参数,确保没有带”—build-id=none”
可通过file命令检查so文件是否带buildid,调试信息file libmytest.so
libmytest.so: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked,
interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.24,
BuildID[sha1]=63f643875228a281430e69123def59c9b6894803,
with debug_info, not stripped
3. iOS OC符号
请编译生产的dSYM文件夹直接zip压缩即可,如果有第三方库,可以把第三方库一起打包,目录层次不作要求。
4. 符号文件建议示例
4.1 Android
xxx.zip
|— mapping.txt —多个mapping需要自行合并
|— libxx1.so —要求与发布的so同名
|— libxx2.so
|— armv7
|— libxx3.so —同文件名,多个架构放不同的目录
|— x86
|— libxx3.so —同文件名,多个架构放不同的目录
4.1 iOS
xxx.zip
|— demo.ios.app.dSYM
|—Contents
|—Resources
|—DWARF
|—ios —主应用符号,要求与xcode模块同名,路径不限
|— sdk1 —sdk1符号,要求与xcode模块同名,路径不限
|— sdk2 —sdk2符号,要求与xcode模块同名,路径不限