Zendesk Belvedere库(belvedere-1.0.2.1.aar)在其清单文件中包含文件提供程序:
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- ...
- ...
- <application>
- <provider
- android:name="com.zendesk.belvedere.BelvedereFileProvider"
- android:authorities="${applicationId}.belvedere.attachments"
- android:exported="false"
- android:grantUriPermissions="true" >
- <Meta-data
- android:name="android.support.FILE_PROVIDER_PATHS"
- android:resource="@xml/belvedere_attachment_storage" />
- </provider>
- </application>
- </manifest>
当Gradle用作构建工具时,将其放在APK文件中,并将合并清单文件中的com.your_package_name_here.belvedere.attachments替换为${applicationId} .belvedere.attachments.没关系.
不过,Xamarin处理方式不一样.这是我在最终的APK的清单中找到的:
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- ...
- ...
- <application
- ...
- ...
- <provider
- android:name="com.zendesk.belvedere.BelvedereFileProvider"
- android:exported="false"
- android:authorities="dollar_openBracket_applicationId_closeBracket"
- android:grantUriPermissions="true">
- <Meta-data
- android:name="android.support.FILE_PROVIDER_PATHS"
- android:resource="@xml/belvedere_attachment_storage" />
- </provider>
- ...
- ...
- </application>
- </manifest>
显然,dollar_openBracket_applicationId_closeBracket不是我需要的.
似乎一切都有效,但是它不可能安装几个使用这些绑定的Xamarin应用程序,因为所有这些应用程序都将具有相同权限的冲突提供者(并且用户将获得INSTALL_Failed_CONFLICTING_PROVIDER错误).
有没有办法在清单中更改dollar_openBracket_applicationId_closeBracket?
解决方法
版本7.1.0.19,没有提供任何bundeID / ApplicationID(${}}替换合并的清单,如gradle.
这只是在清单处理/合并任务中的一个限制,因此您最终以最终清单中的dollar_openBracket_applicationId_closeBracket结尾,并且必须自己更正这两个清单.
唯一目前的解决方案是为了避免明显的合并任务而知道的,其限制是:
>从’.aar’的清单中删除文件提供者条目
>添加完整的文件提供者条目您的应用程序的清单
注意:您必须执行这两个步骤
>手动解压缩aar,删除条目并重新压缩aar(最快的方法)
>通过使用bash或powershell cmds的shell脚本在构建步骤中自动化
>编写基于MSBuild C#的任务来做到这一点.
>请求aar清单在上游更改(不太可能发生;-)因为它可以正常工作/ gradle)
FYI:我个人已经看到你有几次${applicationId}问题.我已经编写了构建脚本(bash / .ps1)来执行清单修复,因为它似乎总是在我正在处理的.arr的清单中的一些特殊情况.