在進(jìn)行動態(tài)權(quán)限時腕窥,除了主工程中聲明的權(quán)限外怯伊,很有可能引用的三方sdk中也有特殊權(quán)限的聲明肆糕,那么如何找到某些特殊權(quán)限是由哪個sdk引入的,又如何解決呢篙议。
如何查找
1.官網(wǎng)
對于三方sdk唾糯,在相應(yīng)官網(wǎng)都會有詳細(xì)的使用說明,使用到的權(quán)限等鬼贱,這確實是一種查找方案移怯,但如果三方sdk很多,或者引用的一些小眾的sdk这难,并沒有詳細(xì)的說明舟误,那這種方法就會顯的無能為力。因此姻乓,我們需要找到另一種更簡便的方式嵌溢。
2.gradle log
gradle在進(jìn)行打包時,會將主工程蹋岩、子工程以及三方sdk中的manifest文件中的內(nèi)容進(jìn)行合并操作赖草,對于權(quán)限的合并,會生成一個相應(yīng)的Log文件剪个。在 app/build/outputs下秧骑,除了常用的 apk和mapping文件夾外,還有一個logs文件夾:
如何解決
1. 更新sdk
想要移除sdk中的相應(yīng)權(quán)限盒至,尤其是危險權(quán)限酗洒,首先是還是去官網(wǎng)上,更新到最新的sdk,看看相應(yīng)的說明中枷遂,是否已經(jīng)把該危險權(quán)限已去除樱衷。
2. tools:node 屬性
這個標(biāo)簽指定了manifest中沖突屬性的合并規(guī)則或刪除不必要的元素和屬性,很明顯酒唉,對于三方中的權(quán)限矩桂,我們是要進(jìn)行刪除的
<uses-permission
android:name="android.permission.READ_PHONE_STATE"
tools:node="remove" />
tools是一個比較強大的功能,除了指定permission外痪伦,對于activity的屬性侄榴、service以及application等中的屬性都可指定,而除了remove,還有replace网沾、strict等癞蚕,具體可見官網(wǎng):https://developer.android.com/studio/build/manifest-merge?hl=zh-cn
注意:在使用上述tools:node="remove"方式移除危險權(quán)限時,一定要保證sdk無此權(quán)限也能正常運行且不影響功能辉哥,否則的話桦山,還需在應(yīng)用中申請此權(quán)限。
參考:
https://medium.com/glucosio-project/how-libraries-can-silently-add-permissions-to-your-android-app-620911d7de6c
https://developer.android.com/studio/build/manifest-merge?hl=zh-cn