共用方式為


更聰明的 Xamarin Android 支援 v4 / v13 NuGet 套件

關於 Android 支援連結庫

Google 已建立支持連結庫,讓舊版 Android 提供新功能。 一般而言,支持連結庫的名稱會提供版本號碼,這是與它們相容的最低 Android API 層級(例如:Support-v4 只能用於 API 層級 4 和更高層級。此 Stack Overflow 討論中的詳細資訊。

其中兩個支持連結庫: Support-v4Support-v13 無法在相同的應用程式中一起使用,也就是說,它們互斥。 這是因為 Support-v13 實際上包含 的所有型別和 實作 Support-v4。 如果您嘗試並參考相同專案中的兩者,您將會遇到重複的類型錯誤。

參考問題

由於 Support-v4 變得如此受歡迎,現在很多第三方連結庫都相依於它。 他們可以選擇改為相 依於 Support-v13,但相依於 v4 比較常見,因為這可讓任何使用這些第三方連結庫的應用程式,一路支援 API 層級的選項降到 4

如果 Xamarin 第三方連結庫參考系 Xamarin.Android.Support.v4.dll 結至 Support-v4,則任何使用此連結庫的應用程式也必須參考 Xamarin.Android.Support.v4.dll。 當同一個應用程式也想要使用系 Xamarin.Android.Support.v13.dll 結至 Support-v13的一些功能時,這會成為問題。 如果您參考這兩個系結,您將會遇到重複的類型錯誤。

類型轉送 v4 系結元件

為了解決這個問題,我們建立了一個沒有實作的特殊 Xamarin.Android.Support.v4.dll 元件,而只是 [assembly: TypeForwardedTo (..)] 將所有 Support-v4 類型轉送至元件內 Xamarin.Android.Support.v13.dll 實作的屬性。

這表示開發人員可以在其應用程式中參考此 類型轉 送元件,以滿足任何第三方連結庫的參考 Xamarin.Android.Support.v4.dll ,同時仍允許 Xamarin.Android.Support.v13.dll 在應用程式中使用。

NuGet 協助

雖然開發人員可以在安裝 NuGet 套件時,手動新增所需的正確參考,但我們可以使用 NuGet 來協助選擇正確的元件(一般 v4 系結或類型轉送的 v4 元件)。

因此, Xamarin.Android.Support.v4 NuGet 套件現在包含下列邏輯:

如果您的應用程式是以 API 層級 13 為目標(姜餅 3.2) 或更高版本:

  • Xamarin.Android.Support.v13 NuGet 會自動新增為相依性
  • 系統會在項目中參考類型轉送 Xamarin.Android.Support.v4.dll

如果您的應用程式以低於 API 層級 13 的任何項目為目標,您將會取得專案中參考的一般 Xamarin.Android.Support.v4.dll 系結。

我是否必須使用 Support-v13?

如果您的應用程式是以 API 層級 13 或更新版本為目標,而且您選擇使用 Xamarin Android Support-v4 NuGet 套件,則 Xamarin Android Support v13 NuGet 套件是必要的相依性。

我們覺得應用程式大小(這兩個.jar檔案不同 17 kb)非常值得相容性,而且導致頭痛較少。

如果您堅持在以 API 層級 13 或更新版本為目標的應用程式中使用 Support-v4 ,您一律可以手動下載 .nupkg、擷取它,以及參考元件。