태그 보관물: android.support.v4.content.FileProvider

FileProvider 사용시 Manifest 중복 문제

안드로이드에서 파일을 공유하기 위해서는 안드로이드 7.0(Nougat / API 24)이전에는 “file://” uri를 사용했다. 그러나 안드로이드 7.0 이후부터는 “content://” uri를 사용해야 하고, uri에 포함된 파일은 엑세스 권한을 부여하고, FileProvider를 사용해야 한다.

일반적인 코드는 아래와 같다.

   

	
	

그래서, 앱에서 파일 공유 기능을 구현하고, 의존 라이브러리가 FileProvider를 사용하면 아래의 에러를 보게된다.

Manifest merger failed with multiple errors, see logs

이 에러를 확인하기 위해서 Merged Manifest 탭을 보니, 맨 아래에 아래의 에러 메시지가 보인다.

Merging Errors:

Error: Attribute provider#android.support.v4.content.FileProvider@authorities value=(net.sjava.barcode.fileprovider) from AndroidManifest.xml:83:13-65 is also present at AndroidManifest.xml:14:13-60 value=(net.sjava.barcode.provider). Suggestion: add ‘tools:replace=”android:authorities”‘ to element at AndroidManifest.xml:81:9-91:20 to override. app main manifest (this file), line 82

Error: Attribute meta-data#android.support.FILE_PROVIDER_PATHS@resource value=(@xml/file_provider_paths) from AndroidManifest.xml:89:17-60 is also present at AndroidManifest.xml:19:17-55 value=(@xml/provider_paths). Suggestion: add ‘tools:replace=”android:resource”‘ to element at AndroidManifest.xml:87:13-90:20 to override. app main manifest (this file), line 88

위 메시지는 ‘tools:replace=”android:authorities”‘를 요소에 추가하고, ‘tools:replace=”android:resource”‘는 요소에 추가하면 된다고 한다. 그래서 안드로이드 스튜디오가 알려주는 대로 이 두 개의 속성을 추가하면 컴파일 에러가 발생하지 않는다.

이 설정은 아래와 같다.

   

	

마지막으로 위 코드처럼 “tools:replace”는 늘 포함시키면 좋겠다.