升级的原因
最近,因为vivo商店的审核问题,将App的minSdk
从21升级到24,下限支持为Android7。ci
上打包的apk
,发给测试之后,测试反馈打开之后就闪退。
出现的问题
排查日志,有一个SIGE(11)
相关的日志,使用未加固的包安装测试,发现正常。因而认为是加固引起的问题。此前的加固策略里有一条是签名检测,加固包签名检测到不一致时,会退出App。
原因
这里是build.gradle
中签名相关的配置
1 | signingConfigs { |
怀疑大概率是签名机制的问题,Android7
及以上默认是使用v2签名。
minSdk
是21时:包构建时使用v1签名打包,然后加固,最后重新使用v1+v2签名。
minSdk
升级为24之后:包构建时使用v2签名打包,然后加固,最后重新使用v1+v2签名。
两种行为之下,在加固的签名校验环节任务签名不一致了,主动关闭App了。
解决
minSdk24
的情况下,构建包时,配置使用使用v1
进行签名,v2
签名需要关闭(默认是打开的),加固之后使用v1+v2
方式重新签名
配置如下:
1 | signingConfigs { |
出现新问题
打个某个页面会出现闪退,sentry上也有关于改崩溃的大量记录
1 | java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libgifimage.so caused by: Dynamic section string-table not found result: 0 |
解决
发现是页面上有个gif动态图,使用的fresco-git先关的库展示的,libgifimage.so
等相关的so库是有fresco
的引入的。fresco
有自己的一套soloader
机制,加固之后so加载不到了。
最终在加固策略中排除fresco
相关的一系列so库,不对这部分so库加固,就能解决问题。
相关so库有
libnative-imagetranscoder.so
libimagepipeline.so
libnative-filters.so
libgifimage.so