изменить это на

поддерживаю

библиотека основная функциональность которого заключается в совместном использовании программно снятых снимков экрана с внешними почтовыми приложениями.Я использую

 чтобы выполнить это, что означает, что манифест моей библиотеки содержитFileProvider тегa <provider> определяется следующим образом::

<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="${applicationId}.bugshaker.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/filepaths" />
</provider>

filepaths.xmlПотребитель моей библиотеки имеет приложение, которое само использует

<paths>
    <files-path path="bug-reports/" name="bug-reports" />
</paths>

 делиться файлами. Я ожидал, что оба провайдера смогут обмениваться файлами, если приложение-потребитель использует следующий манифестFileProvider тег:<provider>Эта манифестная запись:

<provider
    android:authorities="${applicationId}.fileprovider;${applicationId}.bugshaker.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true"
    android:name="android.support.v4.content.FileProvider"
    tools:replace="android:authorities">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths"
        tools:replace="android:resource" />
</provider>

указывает два

 власти,Provider (для обмена файлами приложения) и${applicationId}.fileprovider (для совместного использования файлов библиотеки);${applicationId}.bugshaker.fileproviderссылается на обновленный, который содержит отдельные определения каталогов для файлов, генерируемых приложением, и файлов, генерируемых библиотекой:filepaths.xmlПосле создания приложения мы подтвердили, что сгенерированный манифест заменил правильные узлы на эти обновленные значения.
<paths>
    <external-path
        name="redacted"
        path="" />
    <files-path
        name="bug-reports"
        path="bug-reports/" />
</paths>

Однако, когда приложение, использующее эту конфигурацию, собрано (успешно) и запущено, мы видим сбой при запуске:

Используя отладчик, я вижу, что метод

E: FATAL EXCEPTION: main
   Process: com.stkent.bugshakertest, PID: 11636
   java.lang.RuntimeException: Unable to get provider android.support.v4.content.FileProvider: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.XmlResourceParser android.content.pm.PackageItemInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)' on a null object reference
       at android.app.ActivityThread.installProvider(ActivityThread.java:5856)
       at android.app.ActivityThread.installContentProviders(ActivityThread.java:5445)
       at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5384)
       at android.app.ActivityThread.-wrap2(ActivityThread.java)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1545)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:154)
       at android.app.ActivityThread.main(ActivityThread.java:6119)
       at java.lang.reflect.Method.invoke(Native Method)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.XmlResourceParser android.content.pm.PackageItemInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)' on a null object reference
       at android.support.v4.content.FileProvider.parsePathStrategy(FileProvider.java:583)
       at android.support.v4.content.FileProvider.getPathStrategy(FileProvider.java:557)
       at android.support.v4.content.FileProvider.attachInfo(FileProvider.java:375)
       at android.app.ActivityThread.installProvider(ActivityThread.java:5853)
       at android.app.ActivityThread.installContentProviders(ActivityThread.java:5445) 
       at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5384) 
       at android.app.ActivityThread.-wrap2(ActivityThread.java) 
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1545) 
       at android.os.Handler.dispatchMessage(Handler.java:102) 
       at android.os.Looper.loop(Looper.java:154) 
       at android.app.ActivityThread.main(ActivityThread.java:6119) 
       at java.lang.reflect.Method.invoke(Native Method) 
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 

 ЗапускаетFileProvider.parsePathStrategy со строкой полномочийPackageManager.resolveContentProvider затем возвращает ноль, что приводит к этому NPE."${applicationId}.fileprovider;${applicationId}.bugshaker.fileprovider". resolveContentProviderЕсли я позвоню вручную

 пока пауза в этой инструкции и передать либоresolveContentProviderили же"${applicationId}.fileprovider"  вместо этого возвращает ненулевое "${applicationId}.bugshaker.fileprovider", resolveContentProvider экземпляр (который, казалось бы, ожидаемый результат).ProviderInfoЭта разница смущает меня, потому что

 элементная документация<provider> заявляет, что поддерживаются несколько органов:Список одного или нескольких полномочий URI, которые идентифицируют данные, предлагаемые поставщиком контента. Несколько авторитетных источников перечисляются путем разделения их названий точкой с запятой. Чтобы избежать конфликтов, имена авторитетов должны использовать соглашение об именах в стиле Java (например, com.example.provider.cartoonprovider). Как правило, это имя подкласса ContentProvider, который реализует поставщика

Там нет по умолчанию. Должен быть указан хотя бы один орган.

Вопросы

Возможно ли, чтобы одно приложение выставляло с несколькими правами доступа и путями к файлам?FileProviderЕсли так, что мне нужно изменить, чтобы это работало?Если нет, есть ли другие способы настроить общий доступ к файлам в моей библиотеке, чтобы избежать конфликтов, таких как этот?Вспомогательные ссылкиОригинальный выпуск GitHubПример приложения, демонстрирующего сбой при запуске«Я вижу, что метод PackageItemInfo.loadXmlMetaData вызывается со строкой полномочий« $ {applicationId} .fileprovider; $ {applicationId} .bugshaker.fileprovider »- вы не предоставляете строку полномочий для

Ответы на вопрос(2)

Ваш ответ на вопрос