2017-01-09 22 views
10

我正在嘗試爲Zendesk庫創建綁定,並且遇到了問題。

的Zendesk麗城圖書館(麗城-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> 

當搖籃被用作構建工具,它把這個AAR的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

您在Xamarin.Android中使用的自定義內容提供程序的郵政編碼 –

+0

@Pravin此提供程序不是我的,它來自aar庫。其實,我不會在我的代碼中使用它。 –

+0

有沒有辦法獲得這個實例的示例項目?我最好的猜測是,這個項目可能需要定製的MSBuild功能,或者我們需要修復解析器。 –

回答

5

當前Xamarin.Android清單合併生成任務,直到幷包括7.1.0.19 版本,不提供任何bundeID /的applicationID(${}}替代在像gradle這樣的合併清單

這只是一個limita清單處理/合併任務中的,因此在最終清單中您將以dollar_openBracket_applicationId_closeBracket結尾,並且必須更正,兩者都會顯示出自己的

當前唯一解決辦法知道我避免清單合併任務和它的侷限性是:

  1. 刪除從」文件提供入口。aar`的清單
  2. 添加完整的文件提供進入您的應用程序的清單

注意:做兩個步驟

取決於多久.aar正在發生變化,在那裏你從採購的.aar文件:

  • 手動解壓aar,刪除電子n嘗試並重新壓縮的aar(最快的方式)
  • 自動在此使用bash或PowerShell的CMDS通過shell腳本生成步驟
  • 寫的MSBuild C#爲基礎的任務去做。
  • 請求將aar清單供您參考改變後的上行(不太可能發生,因爲;-)它工作正常瓦特/ gradle

:我個人看到你有幾次${applicationId}問題。我編寫了構建腳本(bash/.ps1)來完成清單修改,因爲它似乎總是我正在處理的.arr的清單中的一些特例。

+0

再次感謝。真正有趣的是Xamarin [試圖處理](https://github.com/xamarin/xamarin-android/blob/24f2aec113857b5c583e14959b9af08ad45b22b1/src/Xamarin.Android.Build.Tasks/Utilities/ManifestDocument.cs#L784)「 applicationId「構建變量。 –

+0

@NikolaiDoronin我也看到了......我相信我最後一次追蹤到'ManifestDocument.Save'方法應用於* .aar清單合併之後,因此它已經被展開(在一個破碎的方式)並且沒有替換髮生。很久以前,這種類型的清單支持存在一個bug,但它是通過Xamarin支持(在購買MSFT之前)從先前的企業客戶(以及我的客戶)完成的。我曾經有過一個bug,但它是私人的,而不是原始的提交客戶不知道它的解決方案... – SushiHangover

+0

@NikolaiDoronin一個公共漏洞應該真正歸檔與你的SO問題相關...我假設*沒有很多人遇到過這個問題,因爲它在過去的2/3年中沒有被注意到/修復過......我很高興你得到它的工作;-)我工作過w/a很多'Xamarin.Android'和Java開發者。在MVVM術語中,我們爲* V *視圖構建純Java UI,將它們綁定並將C#用於* V * view * M * odels和* M * odels。由於巨大的Android/Java Dev,一個非常高效且高效的設計以及將Java UI外包給Java用戶界面非常簡單。所以處理w /'.aar'/manifest/gradle問題是常見的基礎: -/ – SushiHangover

0

項目的主要manifest文件是更高的優先級清單,所以如果您的提供商元素添加到主清單文件並申請合併規則標記爲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> 

+0

這是我第一次嘗試。不幸的是,它只是增加了[新的提供商聲明](http://pastebin.com/T33CGbV0),但不能替代現有的一個。 –

+0

@NikolaiDoronin你用'tools:replace'屬性試過了嗎?合併匹配鍵是'android:name'並且清單合併必須替換提供者。 – Aryan

+0

[是](https://gitlab.com/lassana/ZendeskXamarin/blob/3a30d78e4bd566b76995fcf08817a25045163a92/ZendeskSDK.Droid.Example2/Properties/AndroidManifest.xml),我做到了。有[沒有太大的區別](http://pastebin.com/V1PwCZrV)。 –

相關問題