天天看點

App的版本從22升到25出現的問題記錄 Manifest merger failed with multiple errors 有沒有覺得這個bug很眼熟,其實就是authorities重複了,加上一句 tools:replace="authorities"就解決了。

由于同僚要引入一個視訊監控的庫檔案,是以最近在開發的一個App不得不從22升到25,然而升到25之後各種問題就湧現了,記錄一下。

原因:在版本為25時,從檔案擷取Uri,不能再使用Uri.fromFile("檔案名")。例如在該第三方庫的MultiImageSelectorFragment類中,有這樣一行代碼:

intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mTmpFile));

我們需要把它如下

在上面的代碼中我們看到一個".provider",這個是就是我們自己建立的一個存放檔案的路徑,首先我們要在清單檔案的Application下面加上這樣一段配置:

其中me.nereo.multi_image_selector就是包名,也就是說authorities要設定成"包名.provider",當然這個provider也可以設定成任意名字,但一定要保證和getUriForFile方法裡面的一緻,不然會找不到。接着我們要在res目錄下建立一個“xml”的檔案夾,在裡面建立一個檔案,檔案中的代碼如下:

這樣我們就解決crash的問題,同樣地如果我們在調用拍視訊時也用到了Uri的fromFile()方法也是這樣改,我的項目中就碰到了這樣的情況。不過由于我在項目的清單檔案中也用到了<provider android:authorities ... />,是以出現了一個bug:

問題二:擷取手機deviceId發生crash,這個就涉及到動态權限擷取了,網上解決方法很多,就不贅述了。