一句命令解决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,复制上面两行命令存进去,需要时直接执行即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值