더 스마트한 Xamarin Android 지원 v4/v13 NuGet 패키지Smarter Xamarin Android Support v4 / v13 NuGet Packages

Android 지원 라이브러리 정보About the Android Support Libraries

Google은 이전 버전의 Android에서 새로운 기능을 사용할 수 있도록 지원 라이브러리를 만들었습니다.Google has created support libraries to make new features available to older versions of Android. 일반적으로 지원 라이브러리는와 호환 되는 가장 낮은 Android API 수준인 이름에 버전 번호를 지정 합니다 (예: 지원-v4는 API 수준 4 이상 에서만 사용할 수 있음).In general, Support Libraries are given a version number in their name, which is the lowest Android API Level they are compatible with (eg: Support-v4 can only be used on API Level 4 and higher. Stack Overflow 토론의 추가 정보).More info in this Stack Overflow discussion).

두 지원 라이브러리: Support-v4Support-v13 동일한 앱에서 함께 사용할 수 없습니다. 즉, 함께 사용할 수 없습니다.Two of the support libraries: Support-v4 and Support-v13 can not be used together in the same app, that is, they are mutually exclusive. 이는 Support-v13 실제로 Support-v4의 모든 형식 및 구현을 포함 하기 때문입니다.This is because Support-v13 actually contains all of the types and implementation of Support-v4. 동일한 프로젝트에서 두 항목을 모두 참조 하는 경우 중복 형식 오류가 발생 합니다.If you try and reference both in the same project you will encounter duplicate type errors.

참조 문제Problems with Referencing

Support-v4는 널리 사용 되 고 있으므로 이제 많은 타사 라이브러리에 의존 합니다.Since Support-v4 has become so popular, a lot of 3rd party libraries now depend on it. 대신 지원-v13에 종속 되도록 선택할 수 있지만, 이러한 타사 라이브러리를 사용 하는 모든 앱에는 API 수준을 4까지 지원 하는 옵션을 제공 하므로 v4 에 의존 하는 것이 더 일반적입니다.They could have chosen to depend on Support-v13 instead, but it's more common to depend on v4 since that gives any apps using these 3rd party libraries the option of supporting API levels all the way down to 4.

Xamarin 타사 라이브러리가 Support-v4에 대 한 Xamarin.Android.Support.v4.dll 바인딩을 참조 하는 경우이 라이브러리를 사용 하는 모든 앱은 Xamarin.Android.Support.v4.dll도 참조 해야 합니다.If a Xamarin 3rd party library references the Xamarin.Android.Support.v4.dll binding to Support-v4, any app that uses this library must also reference Xamarin.Android.Support.v4.dll. 이는 동일한 앱이 Xamarin.Android.Support.v13.dll 바인딩의 일부 기능을 Support-v13에도 사용 하려고 할 때 문제가 됩니다.This becomes a problem when the same app also wants to use some of the functionality from the Xamarin.Android.Support.v13.dll binding to Support-v13. 두 바인딩을 모두 참조 하는 경우 중복 형식 오류가 발생 합니다.If you reference both bindings, you will encounter duplicate type errors.

형식 전달 v4 바인딩 어셈블리Type-Forwarded v4 Binding Assembly

이 문제를 해결 하기 위해 구현이 [assembly: TypeForwardedTo (..)] 없지만 모든 Support-v4 형식을 Xamarin.Android.Support.v13.dll 어셈블리 내의 구현으로 전달 하는 특수 한 Xamarin.Android.Support.v4.dll 어셈블리를 만들었습니다.To get around this problem, we have created a special Xamarin.Android.Support.v4.dll assembly which has no implementation, but simply [assembly: TypeForwardedTo (..)] attributes which forward all of the Support-v4 types to the implementation within the Xamarin.Android.Support.v13.dll assembly.

즉, 개발자는 앱에서 이러한 형식 전달 어셈블리를 참조할 수 있습니다 .이 어셈블리는 타사 라이브러리에서 Xamarin.Android.Support.v4.dll 하는 참조를 충족 하는 동시에 앱에서 Xamarin.Android.Support.v13.dll 사용 하도록 허용 합니다.This means a developer can reference this type-forwarded assembly in their app which will satisfy the reference to Xamarin.Android.Support.v4.dll by any 3rd party libraries, while still allowing Xamarin.Android.Support.v13.dll to be used in the app.

NuGet 지원NuGet Assistance

개발자는 필요한 올바른 참조를 수동으로 추가할 수 있지만 nuget 패키지를 설치할 때 NuGet을 사용 하 여 올바른 어셈블리 (일반 v4 바인딩 또는 형식 전달 v4 어셈블리)를 선택할 수 있습니다.While a developer could manually add the correct references necessary, we are able to use NuGet to help choose the right assembly (either the normal v4 binding or the type-forwarded v4 assembly) when the NuGet package is installed.

따라서 Xamarin.Android.Support.v4 NuGet 패키지는 이제 다음과 같은 논리를 포함 합니다.So, the Xamarin.Android.Support.v4 NuGet package now contains the following logic:

앱이 API 수준 13 (Gingerbread 3.2) 이상을 대상으로 하는 경우:If your app is targeting API Level 13 (Gingerbread 3.2) or higher:

  • Xamarin.Android.Support.v13 NuGet은 종속성으로 자동으로 추가 됩니다.Xamarin.Android.Support.v13 NuGet will automatically be added as a dependency
  • 형식 전달 Xamarin.Android.Support.v4.dll 프로젝트에서 참조 됩니다.The type-forwarded Xamarin.Android.Support.v4.dll will be referenced in the project

앱이 API 수준 13 보다 낮은 항목을 대상으로 하는 경우 프로젝트에서 참조 되는 일반 Xamarin.Android.Support.v4.dll 바인딩이 제공 됩니다.If your app is targeting anything lower than API Level 13, you will get the normal Xamarin.Android.Support.v4.dll binding referenced in your project.

지원-v13를 사용 해야 하나요?Do I have to use Support-v13?

앱이 API 수준 13 이상을 대상으로 하 고 Xamarin Android Support-v4 NuGet 패키지를 사용 하도록 선택 하는 경우 Xamarin Android Support v13 NuGet 패키지는 필수 종속성입니다.If your app is targeting API Level 13 or higher and you choose to use the Xamarin Android Support-v4 NuGet package, then the Xamarin Android Support v13 NuGet package is a required dependency.

앱 크기에서 매우 약간 증가 하는 것을 느낄 수 있습니다 (두 .jar 파일은 17kb와 다름) .이로 인해 호환성과 더 적은 문제를 덜 수 있습니다.We feel the very minor increase in app size (the two .jar files differ by 17kb) is well worth the compatibility and fewer headaches it results in.

API 수준 13 이상을 대상으로 하는 앱에서 Support-v4를 사용 하는 방법에 대 한 adamant 경우 항상 수동으로 .nupkg다운로드 하 고, 압축을 풀고, 어셈블리를 참조할 수 있습니다.If you are adamant about using Support-v4 in an app that targets API Level 13 or higher, you can always manually download the .nupkg, extract it, and reference the assembly.