我正在尝试为 Zendesk 库创建绑定(bind),但遇到了问题。
Zendesk Belvedere 库 (belvedere-1.0.2.1.aar) 在其 list 文件中包含一个文件提供程序:
<?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 用作构建工具时,它将此 aar 放入 APK 文件并将 ${applicationId}.belvedere.attachments
替换为 com.your_package_name_here.belvedere.attachments
在合并的 list 文件中。没关系。
但是,Xamarin 的处理方式不同。这是我在最终 APK 的 list 中找到的内容:
<?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
不是我需要的。
似乎一切正常,但是安装多个使用这些绑定(bind)的 Xamarin 应用程序是不可能的,因为所有这些应用程序都会有具有相同权限的冲突提供程序(并且用户会收到 INSTALL_FAILED_CONFLICTING_PROVIDER
错误)。
有没有办法改变 list 中的 dollar_openBracket_applicationId_closeBracket
?
编辑: 显示问题的小示例:https://gitlab.com/lassana/ZendeskXamarin/
最佳答案
当前 Xamarin.Android
list 合并构建任务,直到并包括
版本 7.1.0.19
,不像 gradle
那样在合并的 list 中提供任何 bundeID/ApplicationID(${}
} 替换。
这只是 list 处理/合并任务中的一个限制,因此您最终会在最终 list 中得到 dollar_openBracket_applicationId_closeBracket
并且必须更正两者 展现自己。
我目前唯一知道的避免 list 合并任务的解决方案,它的局限性是:
- 从“.aar”的 list 中删除文件提供程序条目
- 添加您应用 list 的完整文件提供程序条目
注意:您必须完成这两个步骤
取决于 .aar
更改的频率以及您从何处获取 .aar
文件:
- 手动解压缩
aar
,删除条目并重新压缩aar
(最快的方法) - 使用 bash 或 powershell 命令通过 shell 脚本在构建步骤中自动执行此操作
- 编写一个基于 MSBuild C# 的任务来执行此操作。
- 请求上游更改
aar
list (不太可能发生 ;-) 因为它在gradle
上工作正常)
仅供引用:我个人已经多次看到您遇到的 ${applicationId}
问题。我已经编写了构建脚本 (bash/.ps1
) 来进行 list 修复,因为它似乎总是在我的 .arr
list 中出现一些特殊情况正在处理。
关于android - Xamarin中如何处理 "${applicationid}"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41551813/