Android 3.2 API

API 수준: 13

Android 3.2 (HONEYCOMB_MR2)는 사용자와 개발자를 위한 새로운 기능을 추가하는 증분 플랫폼 출시입니다. 아래 섹션에서는 새로운 기능과 개발자 API의 개요를 제공합니다.

개발자는 Android 3.2 플랫폼을 Android SDK의 다운로드 가능한 구성요소로 사용할 수 있습니다. 다운로드 가능한 플랫폼에는 Android 라이브러리, 시스템 이미지, 에뮬레이터 스킨 세트 등이 포함됩니다. Android 3.2 개발 또는 테스트를 시작하려면 Android SDK Manager를 사용하여 플랫폼을 SDK로 다운로드하세요.

플랫폼 하이라이트

새로운 사용자 기능

  • 다양한 태블릿에 대한 최적화

    Android 3.2에는 시스템 전반에 걸쳐 다양한 최적화가 포함되어 광범위한 태블릿 기기에서 뛰어난 사용자 환경을 보장합니다.

  • 고정 크기 앱의 호환성 확대/축소

    Android 3.2에는 사용자가 더 큰 기기에서 고정된 크기의 앱을 볼 수 있는 새로운 방법을 제공하는 새로운 호환성 확대/축소 모드가 도입되었습니다. 새로운 모드는 태블릿과 같이 큰 화면 크기에서 실행되도록 설계되지 않은 앱을 위해 표준 UI 확장 대신 픽셀 배율을 조정할 수 있는 대안을 제공합니다. 호환성 지원이 필요한 앱의 경우 사용자는 시스템 표시줄의 메뉴 아이콘을 통해 새 모드에 액세스할 수 있습니다.

  • SD 카드에서 미디어 동기화하기

    이제 사용자가 SD 카드를 지원하는 기기에서 미디어 파일을 SD 카드에서 직접 이를 사용하는 앱으로 로드할 수 있습니다. 시스템 기능을 통해 시스템 미디어 저장소에서 앱이 파일에 액세스할 수 있습니다.

새로운 개발자 기능

  • 화면 지원 관리를 위한 확장 API

    Android 3.2에서는 개발자가 다양한 Android 지원 기기에서 애플리케이션 UI를 관리할 수 있는 추가적인 방법을 제공하기 위해 플랫폼의 화면 지원 API에 확장 프로그램이 도입되었습니다. API에는 일반화된 크기 카테고리에 의존하는 대신 새로운 리소스 한정자와 새로운 매니페스트 속성이 포함되어 앱이 다양한 크기에서 표시되는 방식을 더 정밀하게 제어할 수 있습니다.

    고정된 크기의 앱과 다양한 화면 크기를 제한적으로 지원하는 앱에 가능한 한 최적의 디스플레이를 보장하기 위해 플랫폼에서는 작은 화면 영역에서 UI를 렌더링한 다음 확장하여 디스플레이에서 사용 가능한 공간을 채우는 새로운 확대/축소 호환성 모드도 제공합니다. 화면 지원 API 및 이 API가 제공하는 컨트롤에 관한 자세한 내용은 아래 섹션을 참고하세요.

API 개요

화면 지원 API

Android 3.2에는 다양한 화면 크기에서 애플리케이션이 표시되는 방식을 더 세밀하게 제어할 수 있는 API가 새로운 화면 지원 API가 도입되었습니다. 이 API는 플랫폼의 일반화된 화면 밀도 모델을 비롯한 기존 화면 지원 API를 기반으로 하지만, 일반화된 화면 크기 (예: 대형 또는 특대형)가 아닌 밀도 독립형 픽셀 단위 (예: 600dp 또는 720dp 너비)로 측정된 크기를 기준으로 특정 화면 범위를 정확하게 타겟팅하는 기능을 추가하여 이 API를 확장합니다.

애플리케이션의 UI를 디자인할 때 계속해서 플랫폼을 사용하여 밀도 추상화를 제공할 수 있습니다. 즉, 애플리케이션이 기기 간 실제 픽셀 밀도의 차이를 보완할 필요가 없습니다. 사용 가능한 가로 또는 세로 공간의 양에 따라 애플리케이션 UI를 디자인할 수 있습니다. 플랫폼은 사용 가능한 공간의 크기를 세 가지 새로운 특성인 smallestWidth, width, height를 사용하여 표현합니다.

  • 화면의 smallestWidth는 밀도 독립형 픽셀 ('dp') 단위로 측정되는 기본 최소 크기입니다. 화면의 높이 또는 너비 중에서 더 짧은 값입니다. 세로 방향 화면의 경우 smallestWidth는 일반적으로 너비를 기준으로 하고 가로 방향에서는 높이를 기준으로 합니다. 모든 경우 smallestWidth는 화면의 고정된 특성에서 파생되며 값은 방향과 상관없이 변경되지 않습니다. smallestWidth는 시스템에 의해 예약된 화면 영역을 포함하지 않고 애플리케이션 UI를 그려야 하는 가장 짧은 너비를 나타내므로 애플리케이션에 중요합니다.
  • 반대로 화면의 너비높이는 애플리케이션 레이아웃에 사용할 수 있는 현재 가로 또는 세로 공간을 나타내며, 'dp' 단위로 측정되며 시스템에 의해 예약된 화면 영역은 포함되지 않습니다. 사용자가 가로 모드와 세로 모드 간에 방향을 전환할 때 화면의 너비와 높이가 변경됩니다.

새 화면 지원 API는 현재 화면의 smallestWidth에 따라 애플리케이션 UI를 관리할 수 있도록 설계되었습니다. 필요에 따라 현재 너비나 높이에 따라 UI를 관리할 수도 있습니다. 이를 위해 API는 다음과 같은 도구를 제공합니다.

  • 레이아웃 및 기타 리소스를 최소 smallestWidth, 너비 또는 높이로 타겟팅하기 위한 새로운 리소스 한정자
  • 앱의 최대 화면 호환성 범위를 지정하는 새로운 매니페스트 속성

또한 애플리케이션은 이전 버전의 플랫폼에서와 마찬가지로 계속 시스템을 쿼리하고 런타임에 UI 및 리소스 로드를 관리할 수 있습니다.

새 API를 사용하면 smallestWidth, 너비, 높이를 통해 화면을 더 직접적으로 타겟팅할 수 있으므로 다양한 화면 유형의 일반적인 특성을 이해하는 데 도움이 됩니다. 아래 표에는 'dp' 단위로 측정된 예가 나와 있습니다.

표 1. 밀도 및 크기(dp)가 표시된 일반적인 기기

유형 밀도 (일반화) 크기 (dp) smallestWidth (dp)
기준 전화 mdpi 320x480 320
소형 태블릿/대형 휴대전화 mdpi 480x800 480
7인치 태블릿 mdpi 600x1024 600
10인치 태블릿 mdpi 800x1280 800

아래 섹션에서는 새로운 화면 한정자 및 매니페스트 속성에 관한 자세한 정보를 제공합니다. 화면 지원 API를 사용하는 방법에 관한 자세한 내용은 여러 화면 지원을 참고하세요.

화면 지원을 위한 새로운 리소스 한정자

Android 3.2의 새로운 리소스 한정자를 사용하면 화면 크기 범위에 맞게 레이아웃을 더 효과적으로 타겟팅할 수 있습니다. 한정자를 사용하면 밀도 독립형 픽셀로 측정된 특정 최소 smallestWidth, 현재 너비 또는 현재 높이용으로 설계된 리소스 구성을 만들 수 있습니다.

새로운 한정자는 다음과 같습니다.

  • swNNNdp - 리소스를 사용해야 하는 최소 smallestWidth를 'dp' 단위로 측정 위에서 언급했듯이 화면의 smallestWidth는 방향과 상관없이 일정합니다. 예: sw320dp, sw720dp, sw720dp
  • wNNNdphNNNdp - 리소스를 사용해야 하는 최소 너비 또는 높이를 'dp' 단위로 측정 위에서 언급했듯이 화면의 너비와 높이는 화면 방향을 기준으로 하며 방향이 변경될 때마다 변경됩니다. 예: w320dp, w720dp, h1024dp.

필요한 경우 중복되는 리소스 구성을 여러 개 만들 수도 있습니다. 예를 들어 480dp보다 넓은 화면에서 사용하도록 일부 리소스, 600dp보다 넓은 화면에서 사용할 리소스, 720dp보다 넓은 화면에서 사용하도록 태그를 지정할 수 있습니다. 주어진 화면에 여러 리소스 구성이 적합하면 시스템은 가장 근접한 구성을 선택합니다. 주어진 화면에 로드되는 리소스를 정밀하게 제어하기 위해 리소스에 하나의 한정자로 태그를 지정하거나 여러 신규 또는 기존 한정자를 결합할 수 있습니다.

다음은 앞에서 나열된 일반적인 측정기준에 따라 새 한정자를 사용할 수 있는 방법의 몇 가지 예입니다.

res/layout/main_activity.xml   # For phones
res/layout-sw600dp/main_activity.xml   # For 7” tablets
res/layout-sw720dp/main_activity.xml   # For 10” tablets
res/layout-w600dp/main_activity.xml   # Multi-pane when enough width
res/layout-sw600dp-w720dp/main_activity.xml   # For large width

이전 버전의 플랫폼에서는 새 한정자를 무시하므로 필요에 따라 혼합하여 모든 기기에서 앱이 보기 좋게 표시되도록 할 수 있습니다. 다음은 몇 가지 예입니다.

res/layout/main_activity.xml   # For phones
res/layout-xlarge/main_activity.xml   # For pre-3.2 tablets
res/layout-sw600dp/main_activity.xml   # For 3.2 and up tablets

새 한정자를 사용하는 방법에 관한 자세한 내용은 새 크기의 한정자 사용을 참고하세요.

화면 크기 호환성을 위한 새로운 매니페스트 속성

프레임워크는 다양한 화면 크기에 관한 앱의 지원을 관리할 수 있는 새로운 <supports-screens> 매니페스트 속성 집합을 제공합니다. 특히 앱이 실행되도록 설계된 가장 큰 화면과 가장 작은 화면은 물론 시스템의 새로운 화면 호환 모드가 없어도 앱이 실행되도록 설계된 가장 큰 화면을 지정할 수 있습니다. 위에서 설명한 리소스 한정자와 마찬가지로, 새 매니페스트 속성은 smallestWidth로 지정된 대로 애플리케이션이 지원하는 화면의 범위를 지정합니다.

화면 지원의 새로운 매니페스트 속성은 다음과 같습니다.

  • android:compatibleWidthLimitDp="numDp" - 이 속성을 사용하면 호환성 모드 없이 애플리케이션을 실행할 수 있는 최대 smallestWidth를 지정할 수 있습니다. 현재 화면이 지정된 값보다 크면 시스템은 일반 모드로 애플리케이션을 표시하지만 사용자가 시스템 표시줄의 설정을 통해 선택적으로 호환성 모드로 전환할 수 있습니다.
  • android:largestWidthLimitDp="numDp" - 이 속성을 사용하면 애플리케이션이 실행되도록 설계된 최대 smallestWidth를 지정할 수 있습니다. 현재 화면이 지정된 값보다 크면 시스템은 현재 화면에 가장 잘 표시되도록 애플리케이션을 화면 호환 모드로 강제합니다.
  • android:requiresSmallestWidthDp="numDp" - 이 속성을 사용하면 애플리케이션이 실행될 수 있는 최소 smallestWidth를 지정할 수 있습니다. 현재 화면이 지정된 값보다 작으면 시스템은 애플리케이션이 기기와 호환되지 않는 것으로 간주하지만 애플리케이션이 설치 및 실행되는 것을 차단하지는 않습니다.

참고: 현재 Google Play는 위의 속성을 기준으로 앱을 필터링하지 않습니다. 필터링 지원은 이후 플랫폼 출시에 추가될 예정입니다. 화면 크기를 기반으로 필터링해야 하는 애플리케이션은 기존 <supports-screens> 속성을 사용할 수 있습니다.

새 속성을 사용하는 방법에 관한 자세한 내용은 화면 크기 지원 선언을 참고하세요.

화면 호환 모드

Android 3.2는 실행 중인 화면만큼 큰 화면을 지원하지 않음을 명시적으로 선언한 애플리케이션을 위한 새로운 화면 호환 모드를 제공합니다. 이 새로운 '확대/축소' 모드는 픽셀 단위로 조정됩니다. 이 모드는 더 작은 화면 영역에서 애플리케이션을 렌더링한 다음 픽셀의 크기를 조정하여 현재 화면을 채웁니다.

기본적으로 시스템에서는 화면 호환 모드가 필요한 앱을 위해 사용자 옵션으로 화면 호환 모드를 제공합니다. 사용자는 시스템 표시줄에 제공되는 컨트롤을 사용하여 확대/축소 모드를 사용 설정하거나 중지할 수 있습니다.

새로운 화면 호환 모드가 모든 애플리케이션에 적합한 것은 아니므로 플랫폼에서는 애플리케이션이 매니페스트 속성을 사용하여 이 모드를 사용 중지하도록 허용합니다. 앱에서 사용 중지하면 시스템은 앱이 실행 중일 때 사용자에게 '확대/축소' 호환성 모드를 옵션으로 제공하지 않습니다.

참고: 애플리케이션에서 호환성 모드를 제어하는 방법에 관한 중요한 정보는 Android 개발자 블로그의 대형 화면의 앱을 위한 새 모드 도움말을 참고하세요.

720p TV 및 유사 기기의 새로운 화면 밀도

720p 텔레비전이나 중간 밀도 화면을 사용하는 이와 유사한 애플리케이션에서 실행되는 애플리케이션의 요구사항을 충족하기 위해 Android 3.2에서는 대략적인 dpi 213으로 일반화된 새로운 밀도 tvdpi를 도입합니다. 애플리케이션은 densityDpi에서 새 밀도를 쿼리할 수 있고 새로운 tvdpi 한정자를 사용하여 텔레비전 및 유사 기기의 리소스에 태그를 지정할 수 있습니다. 예:

res/drawable-tvdpi/my_icon.png   # Bitmap for tv density

일반적으로 애플리케이션은 이 밀도에서 작동할 필요가 없습니다. 720p 화면에서 출력이 필요한 상황에서는 UI 요소의 크기가 플랫폼에 의해 자동으로 조정될 수 있습니다.

UI 프레임워크

  • 프래그먼트
    • Fragment.SavedState 클래스에는 saveFragmentInstanceState()를 통해 프래그먼트 인스턴스에서 검색된 상태 정보가 포함됩니다.
    • 새 메서드 saveFragmentInstanceState()는 지정된 프래그먼트의 현재 인스턴스 상태를 저장합니다. 이 상태는 현재 상태와 일치하는 프래그먼트의 새 인스턴스를 만들 때 나중에 사용할 수 있습니다.
    • 새 메서드 setInitialSavedState()는 처음 생성될 때 Fragment의 초기 저장 상태를 설정합니다.
    • onViewCreated() 콜백 메서드는 onCreateView()가 반환되었지만 저장된 상태가 뷰에 복원되기 전에 프래그먼트에 알립니다.
    • isDetached() 메서드는 프래그먼트가 UI에서 명시적으로 분리되었는지 확인합니다.
    • 새로운 attach()detach() 메서드를 사용하면 애플리케이션이 UI에서 프래그먼트를 다시 연결하거나 분리할 수 있습니다.
    • 새로운 setCustomAnimations() 오버로드 메서드를 사용하면 들어가기/나가기 작업을 위해, 그리고 특히 백 스택을 표시할 때 실행할 특정 애니메이션 리소스를 설정할 수 있습니다. 기존 구현에서는 백 스택을 표시할 때 프래그먼트의 다양한 동작을 고려하지 않습니다.
  • ActivityInfo 및 ApplicationInfo의 화면 크기 정보
  • WindowManager에서 디스플레이 크기를 가져오는 도우미
    • 새 메서드 getSize()getRectSize()를 사용하면 애플리케이션이 디스플레이의 원시 크기를 가져올 수 있습니다.
  • 새로운 공개 '홀로그램' 스타일
    • 이제 플랫폼에서 텍스트, 작업 모음 위젯, 탭 등에 관한 다양한 공개 '홀로그램' 스타일을 노출합니다. 전체 목록은 R.style를 참고하세요.
  • LocalActivityManager, ActivityGroup, LocalActivityManager가 이제 지원 중단됩니다.
    • 새 애플리케이션은 이러한 클래스 대신 Fragment를 사용해야 합니다. 이전 버전의 플랫폼에서 계속 실행하려면 Android SDK에서 사용할 수 있는 v4 지원 라이브러리 (호환성 라이브러리)를 사용하면 됩니다. v4 지원 라이브러리는 Android 1.6 (API 수준 4)과 호환되는 Fragment API 버전을 제공합니다.
    • Android 3.0 (API 수준 11) 이상에서 개발하는 앱의 경우 일반적으로 탭이 작업 모음 영역 내에 탭을 배치하기 위한 새 ActionBar.newTab() 및 관련 API를 사용하여 UI에 표시됩니다.

미디어 프레임워크

  • 플랫폼의 미디어 제공자 (MediaStore)를 사용하는 애플리케이션은 이제 기기에서 지원하는 이동식 SD 카드에서 직접 미디어 데이터를 읽을 수 있습니다. 또한 애플리케이션은 MTP API를 사용하여 SD 카드 파일과 직접 상호작용할 수 있습니다.

그래픽

IME 프레임워크

  • 특수키의 현재 상태를 검색하는 새로운 getModifiers() 메서드가 추가되었습니다.

USB 프레임워크

  • 기기의 원시 USB 설명자를 검색하는 새 getRawDescriptors() 메서드 이 메서드를 사용하여 상위 수준 API를 통해 직접 지원되지 않는 설명어에 액세스할 수 있습니다.

네트워크

전화 통신

핵심 유틸리티

  • Parcelable 유틸리티
  • 바인더 및 IBinder
    • BinderIBinder의 새 메서드 dumpAsync()는 애플리케이션을 지정된 파일로 덤프하여 타겟이 비동기식으로 실행되도록 합니다.
    • 새로운 IBinder 프로토콜 트랜잭션 코드 TWEET_TRANSACTION를 사용하면 애플리케이션이 대상 객체에 트윗을 보낼 수 있습니다.

새 기능 상수

플랫폼은 애플리케이션 매니페스트에서 선언할 수 있는 새로운 하드웨어 기능 상수를 추가하여 Google Play와 같은 외부 항목에 필요한 하드웨어 및 소프트웨어 기능을 알립니다. 이러한 상수와 기타 기능 상수는 <uses-feature> 매니페스트 요소에서 선언합니다.

Google Play는 요구사항이 충족되는 기기에서만 사용할 수 있도록 <uses-feature> 속성을 기반으로 애플리케이션을 필터링합니다.

  • 가로 모드 또는 세로 모드 요구사항을 위한 기능 상수입니다.

    Android 3.2에서는 애플리케이션이 가로 방향, 세로 방향 또는 둘 다에서 표시해야 하는지 지정할 수 있는 새로운 기능 상수가 도입되었습니다. 이러한 상수를 선언하는 것은 관련 방향을 제공하지 않는 기기에 애플리케이션을 설치해서는 안 된다는 것을 나타냅니다. 반대로 상수 중 하나 또는 둘 모두를 선언하지 않으면 애플리케이션이 선언되지 않은 방향을 선호하지 않으며 이를 제공하지 않는 기기에 설치될 수 있음을 나타냅니다.

    가로 모드 방향과 세로 모드 방향 모두에서 올바르게 작동하는 일반적인 애플리케이션은 일반적으로 방향 요구사항을 선언할 필요가 없습니다. 오히려 텔레비전용으로 설계된 앱과 같이 주로 한 방향으로 설계된 애플리케이션은 상수 중 하나를 선언하여 해당 방향을 제공하지 않는 기기에서 사용할 수 없도록 할 수 있습니다.

    매니페스트에 선언된 활동이 android:screenOrientation 속성을 사용하여 특정 방향으로 실행되도록 요청하는 경우 애플리케이션에 해당 방향이 필요하다고 선언합니다.

  • 기타 기능 상수

API 차이점 보고서

Android 3.2 (API 수준 13)의 모든 API 변경사항에 관한 자세한 내용은 API 차이점 보고서를 참고하세요.

API 수준

Android 3.2 플랫폼은 업데이트된 버전의 프레임워크 API를 제공합니다. Android 3.2 API에는 시스템 자체에 저장된 정수 식별자 13이 할당됩니다. 'API 수준'이라고 하는 이 식별자를 사용하면 시스템에서 애플리케이션을 설치하기 전에 애플리케이션이 시스템과 호환되는지 올바르게 판단할 수 있습니다.

Android 3.2에 도입된 API를 애플리케이션에서 사용하려면 Android 3.2 SDK 플랫폼에서 제공되는 Android 라이브러리를 대상으로 애플리케이션을 컴파일해야 합니다. 필요에 따라 애플리케이션의 매니페스트에 있는 <uses-sdk> 요소에 android:minSdkVersion="13" 속성을 추가해야 할 수도 있습니다.

자세한 내용은 API 수준이란 무엇인가요?를 읽어보세요.