一句命令解决app混淆之后mapping文件过大问题

app上线发布之后,会因为客户端版本,机型等复杂多变的情况,而产生很多意料之外的崩溃和错误,这些崩溃严重影响用户体验,甚至有些影响app正常使用,一个可行的办法是使用在线错误收集平台来捕捉这些错误,以在下一版本中改进。

很多开发者使用友盟的免费平台来实现,这在正常情况是个很好的主意,但当app混淆后,会捕捉到很多诸如a,b,c,d,e之类的包类函数名字,这些就需要上传混淆app之后生成的mapping文件以用来给错误解码。

mapping文件是一个字符串映射文件,一边对应未混淆前的包类函数,一边对应混淆后的包类函数,在友盟上,对于该文件有一个10M大小限制.超过了就无法上传,这为review bug带来诸多不便,一个可行的方案是复制bug,使用sdk提供的proguard工具解码,这在bug少时十分有用,不过bug超多的时候,频繁的切换工具,显然不是个好主意。

一个可行的方案是压缩mapping文件的大小,mapping文件是项目里所有符号的集合,随着项目功能增多,符号也会数量级的增加,但我们项目里终会有一些不需要混淆的符号,比如一些第三方包,一些jni调用,一些自动解析的model,这些不混淆的符号也会在mapping里生在相同不变的符号映射,其实这些符号映射是不需要也能正常解码错误代码的,去掉这些未混淆的符号就能给mapping文件瘦身,当文件超级大时,可以把android源生sdk取消混淆,第三方开源库也能取消,只把自己开发的核心功能保留混淆,这样去掉未混淆之符号时,mapping会达到极为精简的地步。

使用shell可以很轻松的去掉未混淆的符号

#!/bin/sh

find ./ -name mapping.txt | xargs cat | awk '{if($2!=$4) print $0}'>./newmapping.txt

在build目录执行这条命令,可以在build下生成压缩后的newmapping.txt,也可以在build目录下创建mapshell,sh,复制上面两行命令存进去,需要时直接执行即可。


猜你喜欢

转载自blog.csdn.net/blogercn/article/details/80215484