android - Xamarin中如何处理 "${applicationid}"?

标签 android xamarin xamarin.android android-manifest

我正在尝试为 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 合并任务的解决方案,它的局限性是:

  1. 从“.aar”的 list 中删除文件提供程序条目
  2. 添加您应用 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/

相关文章:

像 whatsapp 这样的应用程序的 Android 服务或 IntentService?

Xamarin 使用框架创建圆形图像

c# - 无需在 ViewModel 上使用 Java.Lang.Object 即可自动完成 MVVM 和 Java 转换

c# - Xamarin android OnSharedPreferenceChangeListener

android - 从应用程序首选项而不是 AndroidManifest.xml 中读取信息

android - Xamarin.Android TextView 编号不同的字体大小

安卓 : animating button on press through xml

xamarin - MTOUCH : Error MT0024: Could not find required file iPhoneSimulator9. 0.sdk"/SDKSettings.plist

java - 创建 ListView 时出现运行时错误

java - 创建 android studio 库后,我无法添加许多 comman 依赖项