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的清单中的一些特殊情况.