Possible to use multiple authorities with FileProvider?
My solution to this problem has actually been to avoid relying on a single FileProvider
parsing multiple authorities. While this doesn't directly address the question as stated, I'm posting it for posterity.
I updated my library to leverage an empty subclass of FileProvider
, so that the library's updated manifest provider entry is now:
<provider
android:name=".flow.email.screenshot.BugShakerFileProvider"
android:authorities="${applicationId}.bugshaker.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/library_file_paths" />
</provider>
The merged manifest of an application that (1) uses a stock FileProvider
and (2) consumes my library will now contain both of the entries shown below (no collision!):
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.consuming.application.fileprovider"
android:exported="false"
android:grantUriPermissions="true" >
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/application_file_paths" />
</provider>
<provider
android:name="com.github.stkent.bugshaker.flow.email.screenshot.BugShakerFileProvider"
android:authorities="com.consuming.application.bugshaker.fileprovider"
android:exported="false"
android:grantUriPermissions="true" >
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/library_file_paths" />
</provider>
I didn't realize that this was a potential solution until a coworker pointed it out. My assumption had previously (and incorrectly) been that all FileProvider
s in the manifest must set
android:name="android.support.v4.content.FileProvider"
but a quick check of the documentation revealed my error:
The name of the class that implements the content provider, a subclass of ContentProvider. This should be a fully qualified class name (such as, "com.example.project.TransportationProvider"). [...]
i also face this issue and use this approach to resolve it. like i have a library image picker which use file provider and also my app use a file provider when i build my app conflict accur.
my file provide is
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="org.contentarcadeapps.photoeditor.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths"/>
</provider>
change this to
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="org.contentarcadeapps.photoeditor.fileprovider"
android:exported="false"
android:grantUriPermissions="true"
tools:replace="android:authorities">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths"
tools:replace="android:resource"/>
</provider>