지원 라이브러리

참고: Android 9.0(API 레벨 28)의 출시와 함께 Jetpack의 일부인 새로운 버전의 지원 라이브러리 AndroidX가 출시됩니다. AndroidX 라이브러리는 기존 지원 라이브러리를 포함하며 최신 Jetpack 구성요소 또한 포함합니다.

지원 라이브러리를 계속 사용할 수 있습니다. 이전 아티팩트(버전 27과 그 이전 버전 및 android.support.*로 패키징된 것)는 Google Maven에서 계속 사용할 수 있습니다. 그러나 모든 라이브러리 개발은 AndroidX 라이브러리에서 진행됩니다.

새로운 프로젝트에서 AndroidX 라이브러리를 사용하는 것이 좋습니다. 기존 프로젝트를 AndroidX로 이전하는 것 또한 고려해 보세요.

여러 API 버전을 지원하는 앱을 개발할 때 이전 Android 버전에서 새로운 기능을 제공하거나 그와 동일한 기능으로 되돌아가는 표준적인 방법이 필요할 수 있습니다. 플랫폼의 이전 버전을 처리하는 코드를 빌드하는 대신 라이브러리를 사용하여 호환성을 구축할 수 있습니다. 또한 지원 라이브러리는 표준 프레임워크 API에서는 사용할 수 없었던 손쉬운 개발 및 여러 기기에 걸친 지원을 위한 추가 편의 클래스 및 기능을 제공합니다.

원래 앱용 단일 바이너리 라이브러리였던 Android 지원 라이브러리는 앱 개발을 위한 일련의 라이브러리로 발전했습니다. 이러한 라이브러리의 대다수는 앱 개발의 필수적인 요소는 아니지만 이를 사용하는 것을 권장합니다.

이 문서는 지원 라이브러리의 구성요소와 이를 사용자 앱에서 효율적으로 사용하는 방법을 이해하기 위해 지원 라이브러리에 대한 개요를 제공합니다.

주의: 지원 라이브러리 버전 26.0.0(2017년 7월)부터 대부분의 라이브러리 패키지를 대상으로 대부분의 지원 라이브러리가 지원하는 최소 API 레벨은 Android 4.0(API 레벨 14)으로 증가했습니다. 자세한 정보는 이 문서의 버전 지원 및 패키지 이름을 참조하세요.

지원 라이브러리의 용도

지원 라이브러리는 몇 가지 뚜렷한 용도가 있습니다. 플랫폼의 이전 버전에 대한 하위 호환성 클래스는 그중 하나입니다. 앱에서 지원 라이브러리를 사용할 수 있는 더 자세한 방법은 다음과 같습니다.

  • 새로운 API에 대한 하위 호환성 - 지원 라이브러리의 많은 부분은 새로운 프레임워크 클래스 및 방식에 대한 하위 호환성을 제공합니다. 예를 들어 Fragment 지원 클래스는 Android 3.0(API 레벨 11) 이전 버전을 실행하는 기기에서 프래그먼트를 지원합니다.
  • 편의 및 도우미 클래스 - 이 지원 라이브러리는 다양한 도우미 클래스, 특히 사용자 인터페이스 개발용 도우미 클래스를 제공합니다. 예를 들어 RecyclerView 클래스는 Android 버전 API 레벨 7 이상에서 사용할 수 있는 매우 긴 목록을 나타내고 관리하는 사용자 인터페이스 위젯을 제공합니다.
  • 디버깅 및 유틸리티 - 방식 입력에서 개선된 코드 Lint 검사를 위한 support-annotations 라이브러리와 65,536개가 넘는 앱 구성 및 배포 방식을 위한 Multidex 지원을 포함한 앱에 통합한 코드 외 유틸리티를 제공하는 다양한 기능이 있습니다.

지원 사용 vs 프레임워크 API

지원 라이브러리는 Android 프레임워크에서 API와 매우 유사한 클래스와 방식을 제공합니다. 이를 발견하면 API의 프레임워크 버전을 사용해야 할지, 이와 동등한 지원 라이브러리를 사용해야 할지 고민할 수 있습니다. 다음은 언제 프레임워크 API 대신 지원 라이브러리를 사용해야 하는지에 대한 지침입니다.

  • 특정 기능과 호환성 - 플랫폼의 이전 버전을 실행 중인 기기에서 최근 플랫폼 기능을 지원하려면 지원 라이브러리에서 동등한 클래스와 방식을 사용합니다.
  • 관련 라이브러리 기능과 호환성 - 더 정교한 지원 라이브러리 클래스는 1개 이상의 지원 라이브러리에 종속될 수 있으므로 이를 위해서 지원 라이브러리를 사용해야 합니다. 예를 들어 ViewPager 지원 클래스는 FragmentPagerAdapter 또는 FragmentStatePagerAdapter 지원 클래스와 함께 사용해야 합니다.
  • 일반 기기와 호환성 - 하위 호환성 측면에서 앱과 함께 사용할 특정 플랫폼 기능이 없어도 앱에 지원 라이브러리 클래스를 사용하는 것이 좋습니다. 예를 들어 Android 6.0(API 레벨 23)에서 도입된 새로운 권한 모델 통합과 같이 추후 새로운 기능을 최대한 활용하기 위해선 프레임워크 ActivityCompat 클래스 대신 Activity을 사용해야 합니다.

플랫폼 API 클래스의 호환성 구현을 제공하는 지원 라이브러리 클래스는 호스트 기기 플랫폼 버전의 제한으로 인해 최신 버전의 모든 기능을 제공하지 못할 수도 있습니다. 이와 같은 경우 지원 라이브러리 클래스는 단계적으로 성능이 저하되도록 설계되었으며 최신 플랫폼 API의 모든 기능 또는 데이터를 제공하지 못할 수도 있습니다. 이와 같은 이유로 사용하는 라이브러리 클래스와 방식의 참조 문서를 확인해야 하며 앱이 지원하는 가장 오래된 버전의 플랫폼을 실행하는 기기에서 철저하게 테스트해야 합니다.

참고: 지원 라이브러리는 각 프레임워크 API 마다 동등한 클래스와 방식을 제공하지 않습니다. 경우에 따라 기기에서 사용할 수 없는 방식을 처리하기 위해 프레임워크 방식 콜을 명시적 SDK 버전 체크로 래핑하고 대체 코드를 제공해야 할 수도 있습니다. 코드에 버전 체크를 사용하는 것에 대한 자세한 내용은 다양한 플랫폼 버전 지원하기를 참조하세요.

버전 지원 및 패키지 이름

일부 지원 라이브러리 패키지는 support-v4 패키지처럼 v# 표기법으로 원래 지원하는 최소 API 레벨을 나타내는 패키지 이름을 가지고 있습니다. 지원 라이브러리 버전 26.0.0 (2017년 7월 버전)부터 모든 지원 라이브러리 패키지 대상으로 지원되는 최소 API 레벨이 Android 4.0(API 레벨 14)으로 변경되었습니다. 이러한 이유로 지원 라이브러리의 최신 버전을 사용할 때 v# 패키지 표시법이 최소 API 지원 레벨을 나타낸다고 볼 수 없습니다. 최신 버전의 이러한 변화는 v4와 v7 라이브러리 패키지가 동일한 최소 API 수준을 지원한다는 것을 의미합니다. 예를 들어 26.0.0 이상 버전의 지원 라이브러리에 대해서 support-v4와 support-v7 패키지는 모두 최소 API 레벨 14를 지원합니다.

라이브러리 출시 버전 지원

24.2.0 또는 25.0.1과 같은 지원 라이브러리의 출시 버전은 해당 버전의 라이브러리가 지원하는 최소 API 레벨과 다릅니다.출시 버전 숫자는 라이브러리가 빌드된 플랫폼 API 버전을 나타내므로 이 버전의 라이브러리에 추가될 수 있는 가장 최근 API를 나타냅니다.

특히 버전 24.2.0에서 24와 같은 출시 버전 숫자의 첫 번째 부분은 출시 당시 사용할 수 있었던 플랫폼 API의 버전과 일치합니다. 지원 라이브러리의 출시 버전 레벨을 해당 API의 일부 기능을 포함한다는 것을 보여주나 이것이 새로운 플랫폼 API 버전에 출시된 모든 기능과 호환될 것이라고 가정하면 안 됩니다.

라이브러리 종속성

Android 지원 라이브러리 모음의 대부분 라이브러리는 1개 이상의 라이브러리에 종속됩니다. 예를 들어 거의 모든 지원 라이브러리는 support-compat 패키지에 종속됩니다. 일반적으로 gradle 빌드 도구가 종속되는 라이브러리를 자동으로 포함하여 라이브러리 종속성을 관리하기 때문에 지원 라이브러리 종속성을 걱정하지 않아도 됩니다.

어떤 라이브러리와 라이브러리 종속성이 앱에 추가되는지 확인하고 싶으면 다음 명령어를 앱 개발 프로젝트의 빌드 루트에서 실행하여 Android 지원 라이브러리와 다른 라이브러리를 포함한 해당 프로젝트의 종속성 보고서를 가져옵니다.

    gradle -q dependencies your-app-project:dependencies
    

Gradle로 개발 프로젝트에 지원 라이브러리를 추가하는 방법을 자세히 알아보려면 지원 라이브러리 설정을 참조하세요. Gradle 작업에 대한 자세한 내용은 빌드 구성하기를 참조하세요.

Android 4.0(API 레벨 14) 이상의 최신 버전의 경우 모든 Android 지원 라이브러리가 플랫폼의 기본 레벨에 종속된다는 점을 참고하세요.