Android 如何处理${applicationid}";在Xamarin?
我正在尝试为Zendesk库创建绑定,但遇到了一个问题 Zendesk Belvedere库(Belvedere-1.0.2.1.aar)在其清单文件中包含一个文件提供程序:Android 如何处理${applicationid}";在Xamarin?,android,xamarin,xamarin.android,android-manifest,Android,Xamarin,Xamarin.android,Android Manifest,我正在尝试为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>
<?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>
显然,dollar\u openBracket\u applicationId\u closeBracket
不是我需要的
看起来一切都正常,但是安装几个使用这些绑定的Xamarin应用程序是不可能的,因为所有这些应用程序都有具有相同权限的冲突提供程序(并且用户将获得install\u FAILED\u conflicting\u PROVIDER
error)
是否有办法更改清单中的dollar\u openBracket\u applicationId\u closeBracket
编辑:一个显示问题的小示例:项目的主清单文件是优先级较高的清单,因此如果您将提供者元素添加到主清单文件,并为
android:authorities
属性应用合并规则标记,合并工具将替换您在主清单中声明的android:authorities
值
在主清单中声明provider
元素:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
...
...
<application>
<provider
android:name="com.zendesk.belvedere.BelvedereFileProvider"
android:authorities="com.example.belvedere.attachments"
tools:replace=”android:authorities” >
</provider>
</application>
...
...
当前的
Xamarin.Android
清单合并构建任务,包括
版本7.1.0.19
,没有像gradle
那样在合并清单中提供任何bundeID/ApplicationID(${}
})替换
这只是清单处理/合并任务中的一个限制,因此最终清单中会出现dollar\u openBracket\u applicationId\u closeBracket
,您必须自己更正两个清单
据我所知,目前唯一可以避免清单合并任务的解决方案是:
.aar
的更改频率以及.aar
文件的来源:
- 手动解压缩
,删除条目并重新压缩aar
(最快的方式)aar
- 通过使用bash或powershell cmds的shell脚本在构建步骤中自动执行此操作
- 编写一个基于MSBuild C#的任务来完成它
- 请求上游更改
清单(不太可能发生;-),因为它可以正常工作aar
仅供参考:就个人而言,我已经多次看到您遇到的
${applicationId}
问题。我已经编写了构建脚本(bash/.ps1
)来进行清单修复,因为我正在处理的.arr
清单中似乎总是有一些特殊情况。根据微软团队的说法,Xamarin.build.Download(0.4.12-preview)终于完成了
因此,您应该遵循以下步骤:
在Xamarin中使用的自定义内容提供程序的Post代码。Android@Pravin这个提供者不是我的,它来自aar图书馆。事实上,我的代码中没有使用它。有没有一种方法可以让这个示例项目付诸实施?我最好的猜测是,这个项目可能需要自定义MSBuild功能,或者我们需要修复解析器。@JonDouglas我已经添加了到存储库的链接。
${name}
s应该由gradle预处理,但它不是xamarin绑定构建过程的一部分。我查看了xamarin构建工具的源代码只是为了好玩,但找不到任何方法连接到这个过程中,如果我理解正确,所有的转换都不适用于清单文件。我只能建议糟糕的解决方法-解压aar、补丁清单。再拉一次拉链,改名为..aar,你会没事的这是我第一次尝试。不幸的是,它只是添加了一个,而不是替换aar中已有的一个。@NikolaiDoronin您是否用tools:replace
attribute尝试过它?合并匹配键是android:name,manifest merge必须替换提供者。有。@Aryan这将不起作用,因为.aar
的清单文件提供程序条目与手动添加到应用程序清单中的条目不匹配,因此将创建另一个条目。当前唯一的方法是从.aar
清单中删除文件提供程序条目…再次感谢。真正有趣的是Xamarin“applicationId”构建变量。@NikolaiDoronin我也看到了。。。我相信上次我跟踪它时,ManifestDocument.Save
方法是在.aar
的清单合并之后应用的,因此它已经被扩展(以一种中断的方式),并且没有发生替换。很久以前,这种清单支持存在一个bug,但它是通过Xamarin支持(在购买MSFT之前)从以前的企业客户(和我的客户)那里完成的。我曾经有一个bug#但它是私人的,不是最初的归档客户,我不知道它的解决方案…@NikolaiDoronin一个公共bug真的应该归档,所以你的问题与之关联。。。我假设没有多少人遇到过这个问题,因为它在过去的2/3年中没有被注意到/修复。。。我很高兴你成功了;-)我与许多Xamarin.Android
和Java开发人员一起工作过。在MVVM术语中,我们为视图构建纯Java UI,绑定它们,并为视图模型和模型使用C#。由于Android/Java开发人员基数巨大,所以在Java中设计和外包Android UI的性能和内存效率都非常高,因此处理w/.aar
/manifest/gradle问题是很常见的问题:-/我在Xamarin Bugzilla中发布了一个新问题:@NikolaiDoronin感谢bug链接
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
...
...
<application>
<provider
android:name="com.zendesk.belvedere.BelvedereFileProvider"
android:authorities="com.example.belvedere.attachments"
tools:replace=”android:authorities” >
</provider>
</application>