编译Release版本莫名其妙增加READ_PHONE_STAT
前言
我们自营的某应用上架商店时发现商店提醒新增权限READ_PHONE_STATE,一直对权限这块非常克制的我们本能的眉头一皱,发觉事情并不简单......
排查
排查首先从加固开始,我们在不同的渠道分别采用了乐固和360两套加固方案,有没有可能是加固这块出了问题?首先是乐固,经过对空包加固测试发现,乐固加固并未增加权限(但基于之前有一段时间出现了增加权限的现象,此处不保证不再犯...)
然后是360加固,默认配置情况下对空包进行加固,发现增加了READ_PHONE_STATE权限,但可以在基础设置中修改:
360加固配置.png
就可以避免增加权限了。
注意,因加固过程是在云端进行的,因此加固测试具有时效性,请根据实际情况进行测试。
理论上两家都可以避免增加额外权限加固,而我们的程序manifest配置中并没有声明READ_PHONE_STATE权限,那么READ_PHONE_STATE究竟是怎么被添加到安装包里的呢?
继续寻找答案,我们前往程序根目录\app\build\outputs\logs\manifest-merger-release-report.txt中找到编译过程日志,在其中寻找READ_PHONE_STATE,果然有所收获:
logs.png
可以明显看到cn.yc:WebViewLib有重大作案嫌疑,这个库的一个非常好用的第三方X5 Webview内核封装,为提升Webview加载效率,我们集成了这个库,在进入其manifest配置中确实看到有READ_PHONE_STATE权限的声明:
ycwebviewmanifest.png于是接下来的步骤就很简单了,自己编译一份这个库,删除READ_PHONE_STATE权限,并打包aar引入原程序,打包就发现READ_PHONE_STATE没有啦。
附录-打包aar
先从Github拉下原库,做好修改后点击Android Studio顶部Build->Make Module'XXX'待Build完成后进入根目录\库名称\build\outputs\aar即可找到编译好的aar文件,然后进入你的程序,使用《Android Studio导入AAR》
这篇文章提到的方法加载aar文件即可。
尾巴
本篇提供了一个排查可能出现的“幽灵”权限的全过程,如果你的程序也出现这种情况可以尝试按文章步骤排查一遍,如果对你有帮助麻烦给个赞,如果有什么疑问欢迎在评论区讨论。