안드로이드의 하위호환성/상위호환성에 대해서는 지난 글에서 설명한 바 있다. 이번에는 안드로이드에서 하위호환성을 어떻게 지원하는지 알아보자.
신규 모델에서 추가된 기능이라면 신규 모델에서만 실행되도록 앱을 설정한 후에 그 기능을 사용하면 된다. 개선된 기능이라면 오래된 모델에서는 개선 전의 것을 새로운 모델에서는 개선된 기능을 쓰면 그만이다. 성능이 개선될 수 있지만 동작은 할테니까 말이다. 하지만, UI와 같이 사용자가 위화감을 가질만한 부분은 어떻게 해야할까? 오래된 단말에 맞추어 개발을 하면 최신 트렌드에 맞지 않을 테고, 최신 단말에 맞추어 개발하면 오래된 단말에서 올바로 보일리가 없다. 이를 어찌해야하나?
안드로이드에서는 서포트 라이브러리(Support Library)라는 이름의 라이브러리들로 하위호환성을 지원한다.
서포트 라이브러리(Support Library)
처음 이 라이브러리가 릴리즈 될 때 이름은 안드로이드 호환성 라이브러리(Android Compatibility Library) 였다. 이름에서도 알 수 있듯이 이 라이브러리의 용도는 호환성 지원이다.
현재 v4, v7, v8, v13로 총 4개의 라이브러리가 있다. 각각 API 4, API 7, API8, API 13이상을 지원한다. 그러므로 minSdkVersion을 사용하고자 하는 라이브러리의 지원 버전 이하로 맞춰야 한다.
예를 들어 v7를 사용하고자 한다면,
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="17" />
와 같이 적어주어야 한다. 각 라이브러리들이 어떤 기능을 지원하는 지는 여기를 보면 된다.
사실 서포트 라이브러리가 하위호한성을만을 위한 라이브러리는 아니지만(이 라이브러리에서만 지원하는 기능도 있음) 대부분의 기능들이 UI(User Interface), 접근성(Accessibility), 레이아웃에 관련된 기능이라 호환성을 위한 라이브러리라고 봐도 무방하다.
안드로이드에서는 v4와 v7이 다양한 안드로이드 버전과 UI 관련 기능을 지원하기 때문에 사용을 추천하고 있으며, 이 때 v4와 v7 모두를 앱에서 사용했다면 minSdkVersion=7이 되어야 한다. 왜냐하면, minSdkVersion을 4로 설정하는 경우 v7 라이브러리가 동작하지 않기 때문이다.
마지막으로 소스코드 보호와 함께 필요없는 클래스들이 apk안에 포함되지 않도록 프로가드(ProGuard)를 사용하는 것을 권유하고 있다.
참고
- http://developer.android.com/tools/support-library/index.html
- http://developer.android.com/tools/support-library/features.html
- http://developer.xamarin.com/guides/android/platform_features/fragments/part_4_-_providing_backwards_compatibility_with_the_android_support_package/
- http://developer.android.com/guide/topics/manifest/uses-sdk-element.html