我正在尝试为Zendesk库创建绑定,但我遇到了一个问题。
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文件中,并在合并的清单文件中用${applicationId}.belvedere.attachments
替换com.your_package_name_here.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
?
修改:显示问题的小样本:https://gitlab.com/lassana/ZendeskXamarin/
答案 0 :(得分:5)
当前Collections
清单合并构建任务,包括
版本Xamarin.Android
,在7.1.0.19
合并后的清单中不提供任何bundeID / ApplicationID(${}
}替换。
这只是清单处理/合并任务中的限制,因此您最终清单中的gradle
结尾,并且必须纠正两者表明自己。
当前唯一的解决方案是让我知道避免清单合并任务,它的限制是:
注意:您有执行这两个步骤
取决于dollar_openBracket_applicationId_closeBracket
发生变化的频率以及您从.aar
文件中获取.aar
文件的位置:
aar
,删除条目并重新压缩aar
(最快的方式)aar
清单上游更改(不太可能发生;-)因为它可以正常工作w / gradle
)仅供参考:我个人已经看过你有几次问题${applicationId}
。我已经编写了构建脚本(bash/.ps1
)来进行清单修复,因为它似乎总是在我处理的.arr
清单中的一些特殊情况。
答案 1 :(得分:1)
根据Microsoft团队的说法,Xamarin.Build.Download(0.4.12版预览)最终fixes this bug。
因此,您应该按照以下步骤操作:
答案 2 :(得分:0)
项目的主清单文件是优先级较高的清单,因此如果将provider元素添加到主清单文件并为android:authorities
属性应用合并规则标记,则合并工具将替换{{1}您在主清单中声明的值。
在主清单中声明android:authorities
元素:
provider