1. 程式人生 > >完美解決主工程與lib庫的FileProvider衝突

完美解決主工程與lib庫的FileProvider衝突

1.問題

在android系統6.0以上的系統對許可權的管理越來越嚴格了,特別是儲存許可權,需要通過FileProvider來讀寫檔案,或許很多朋友像我一樣都遇到過主工程與lib庫的provider衝突,導致工程無法編譯,錯誤資訊如下:

錯誤資訊

2.原因分析

在主工程manifest檔案中引用了FileProvider:

錯誤資訊

同樣在lib庫的manifest檔案中也引用了FileProvider:

錯誤資訊

編譯器在編譯工程合併manifest檔案時候就丟擲了provider衝突問題,顯而易見是其中的authrities衝突了。

在as的log日誌裡和在網上查詢資料都是說在主工程的manifest檔案裡的provider下加上tools:replace就能成功解決問題。加上後,看似確實編譯通過了,但是在主工程或者lib庫用到FileProvider讀寫檔案的時候還是報錯了,各種修改manifest檔案也沒能解決這個問題。

3.解決方法

其實一想,我們在應用中用的都是v4包提供的FileProvider類來讀寫檔案的,從而導致衝突,如果我們自己在工程中新寫個FileProvider類繼承自系統的FileProvider類來讀寫檔案不就問題解決了麼?帶著這個想法一試,果然成功了。皇天不負有心人吶!下面是所有的程式碼片段:

圖片

圖片

圖片

上面這種做法有種好處就是不用將lib庫下載下來然後修改lib庫裡的provider了,lib庫裡還是可以用原來的provider。