Google Play의 대상 API 수준 요구사항 충족

APK를 업로드하는 경우 Google Play의 대상 API 수준 요구사항을 충족해야 합니다.

2024년 8월 31일부터 다음과 같습니다.

  • 새 앱과 앱 업데이트는 Google Play에 제출하려면 Android 14 (API 수준 34) 이상을 타겟팅해야 합니다. 단, Android 13 (API 수준 33) 이상을 타겟팅해야 하는 Wear OS 및 Android TV 앱은 예외입니다.
  • 기존 앱이 Android 13 (API 수준 33) 이상을 타겟팅해야 앱의 대상 API 수준보다 상위 버전의 Android OS를 실행하는 기기에서 신규 사용자가 계속 사용할 수 있습니다. Android 12 (API 수준 31) 이하 (Wear OS의 경우 Android 10 (API 수준 29) 이하, Android TV의 경우 Android 11 (API 수준 30) 이하)를 타겟팅하는 앱은 앱의 대상 API 수준과 같거나 낮은 Android OS를 실행하는 기기에서만 사용할 수 있습니다.

앱을 업데이트하기 위해 시간이 더 필요한 경우 2024년 11월 1일까지 연장을 요청할 수 있습니다. 올해 말에는 Play Console에서 앱의 기한 연장 요청 양식을 이용할 수 있게 됩니다.

이러한 요구사항에 대한 예외는 다음과 같습니다.

  • 특정 조직의 사용자로 제한되며 내부 배포용으로만 사용되는 영구 비공개 앱
  • Android Automotive OS를 타겟팅하는 앱 또는 Android Automotive OS를 타겟팅하는 APK로 패키징된 앱입니다.

최신 SDK를 타겟팅해야 하는 이유

새로운 Android 버전이 출시될 때마다 보안 및 성능이 개선되며 Android 사용자 환경이 향상됩니다. 이러한 변경사항 중 일부는 targetSdkVersion 매니페스트 속성 (타겟 API 수준이라고도 함)을 통해 지원을 명시적으로 선언한 앱에만 적용됩니다.

최신 API 수준을 타겟팅하도록 앱을 구성하면 사용자가 이러한 개선사항의 이점을 누릴 수 있으며, 이전 Android 버전에서도 계속해서 앱을 실행할 수 있습니다. 최신 API 수준을 타겟팅하면 앱에서 플랫폼의 최신 기능을 활용해 사용자 환경을 개선할 수 있습니다. 또한 Android 10 (API 수준 29)부터 앱에서 Android 5.1 (API 수준 22) 이하를 타겟팅하는 경우 사용자가 처음으로 앱을 시작할 때 경고가 표시됩니다.

이 문서에서는 Google Play 요구사항을 충족하기 위해 대상 API 수준을 업데이트할 때 알아 두어야 하는 중요한 사항에 관해 다룹니다. 이전할 버전에 따라 다음 섹션의 안내를 참고하세요.

Android 12 이상 (API 수준 31)에서 최신 버전으로 이전

최신 버전의 Android를 타겟팅하도록 앱을 업데이트하려면 관련 동작 변경사항 목록을 따르세요.

Android 11(API 수준 30)에서 Android 12(API 수준 31)로 이전

보안 및 권한

사용자 환경

  • 맞춤 알림: 맞춤 콘텐츠 뷰가 있는 알림은 더 이상 전체 알림 영역을 사용하지 않습니다. 대신 시스템에서 표준 템플릿을 적용합니다. 이 템플릿은 맞춤 알림이 모든 상태에서 다른 알림과 동일한 장식을 보유하도록 합니다. 이 동작은 Notification.DecoratedCustomViewStyle의 동작과 거의 동일합니다.
  • Android App Links 인증 변경사항: Android App Links 인증을 사용하는 경우 인텐트 필터가 BROWSABLE 카테고리를 포함하고 HTTPS 스키마를 지원하는지 확인하세요.

성능

  • 포그라운드 서비스 실행 제한: Android 12 이상을 타겟팅하려면 앱이 몇 가지 특별한 사례를 제외하고 백그라운드에서 실행되는 동안 포그라운드 서비스를 시작할 수 없습니다. 앱이 백그라운드에서 실행되는 동안 포그라운드 서비스를 시작하려고 하면 예외가 발생합니다(특별한 사례 제외).

    앱이 백그라운드에서 실행되는 동안 WorkManager를 사용하여 신속 처리 작업을 예약하고 시작해 보세요. 신속히 처리해야 하는 사용자 요청 작업을 완료하려면 정확한 알람 내에서 포그라운드 서비스를 시작하세요.

  • 알림 트램펄린 제한사항: 사용자가 알림을 탭하면 일부 앱은 사용자가 보고 상호작용할 수 있는 활동을 시작하는 앱 구성요소를 실행하여 응답합니다. 이 앱 구성요소를 알림 트램펄린이라고 합니다.

    앱은 알림 트램펄린으로 사용되는 서비스나 broadcast receiver에서 활동을 시작해서는 안 됩니다. 사용자가 알림 또는 알림의 작업 버튼을 탭하면 앱이 서비스나 broadcast receiver 내부에서 startActivity()를 호출할 수 없습니다.

Android 12 (API 수준 31)를 타겟팅하는 앱에 영향을 주는 변경사항을 모두 살펴보세요.

Android 11 (API 수준 30) 미만에서 이전

이전할 Android 버전을 선택하세요.

Android 5(API 수준 21)로 이전

아래 버전에서 도입된 변경사항이 앱에 적용되었는지 확인하려면 각 버전별 동작 변경사항 페이지를 참고하세요.

다음 섹션의 안내를 따라 계속하세요.

Android 6(API 수준 23)으로 이전

다음 항목은 Android 6.0 이상 버전을 타겟팅하는 앱에 적용됩니다.

  • 런타임 권한

    • 위험한 권한은 런타임에만 부여되기 때문에 UI 흐름에 이러한 권한을 부여할 여유가 확보되어야 합니다.

    • 가능한 경우 앱에서 권한 요청 거부를 처리할 준비가 되어 있어야 합니다. 예를 들어 사용자가 기기 GPS 액세스 권한 요청을 거부하면 앱에서 다른 방법으로 진행할 수 있어야 합니다.

Android 6.0(API 수준 23)에서 도입된 변경사항의 전체 목록을 확인하려면 해당하는 버전의 Android를 다루는 동작 변경사항 페이지를 참고하세요.

다음 섹션의 안내를 따라 계속하세요.

Android 7(API 수준 24)로 이전

다음 항목은 Android 7.0 이상 버전을 타겟팅하는 앱에 적용됩니다.

  • 잠자기 및 앱 대기

    잠자기 및 앱 대기 최적화에 설명되어 있는 동작을 고려하여 설계합니다. 여기에는 여러 차례의 플랫폼 출시를 통해 도입된 점진적인 변경사항이 모두 포함됩니다.

    기기가 잠자기 및 앱 대기 모드일 때, 시스템은 다음과 같이 작동합니다.

    • 네트워크 액세스를 제한합니다.
    • 알람, 동기화, 작업을 연기합니다.
    • GPS 및 Wi-Fi 검색을 제한합니다.
    • 일반적인 우선순위를 갖는 Firebase 클라우드 메시징 메시지를 제한합니다.
  • 권한 변경사항

    • 시스템에서 앱 비공개 디렉터리 액세스를 제한합니다.
    • 앱 외부에 file:// URI를 노출하면 FileUriExposedException이 트리거됩니다. 앱 외부로 파일을 공유해야 하는 경우 FileProvider를 구현합니다.
  • 시스템에서 NDK가 아닌 라이브러리로의 링크를 금지합니다.

Android 7.0(API 수준 24)에서 도입된 변경사항의 전체 목록을 확인하려면 해당하는 버전의 Android를 다루는 동작 변경사항 페이지를 참고하세요.

다음 섹션의 안내를 따라 계속하세요.

Android 8(API 수준 26)로 이전

다음 항목은 Android 8.0 이상 버전을 타겟팅하는 앱에 적용됩니다.

Android 8.0(API 수준 26)에서 도입된 변경사항의 전체 목록을 확인하려면 해당하는 버전의 Android를 다루는 동작 변경사항 페이지를 참고하세요.

Android 8 (API 26)에서 Android 9 (API 28)로 이전

Android 9.0(API 수준 28)에 도입된 변경사항의 전체 목록을 확인하려면 동작 변경사항을 참고하세요.

Android 9 (API 수준 28)에서 Android 10 (API 수준 29)으로 이전

Android 10(API 수준 29)에서 Android 11(API 수준 30)로 이전

Android 11 (API 수준 30)에서 도입된 변경사항의 전체 목록을 확인하려면 동작 변경사항 페이지를 참고하세요.

이전 섹션의 안내를 따라 API 31로 계속 업데이트합니다.

앱 현대화

앱의 대상 API 수준을 업데이트하면서 Android의 최신 기능을 도입하여 앱을 현대화하고 사용자 환경을 개선할 방법이 있는지 생각해 보세요.

  • 베타 버전인 CameraX를 사용하여 카메라를 최대한 활용하세요.
  • Jetpack 구성요소를 통해 권장사항을 따르고, 상용구 코드 작성 작업에서 벗어나며, 복잡한 작업을 간소화하여 중요한 코드에만 집중할 수 있습니다.
  • Kotlin을 사용하면 더 적은 코드로 더 빠르게 더 나은 앱을 작성할 수 있습니다.
  • 개인정보 보호 요구사항 및 권장사항을 준수해야 합니다.
  • 앱에 어두운 테마 지원을 추가하세요.
  • 앱에 동작 탐색 지원을 추가하세요.
  • Google 클라우드 메시징 (GCM)에서 최신 버전의 Firebase 클라우드 메시징으로 앱을 이전하세요.
  • 고급 창 관리를 활용합니다.

SDK 및 라이브러리 확인 및 업데이트

서드 파티 SDK 종속 항목이 API 31을 지원하는지 확인하세요. 일부 SDK 제공업체는 종속 항목을 매니페스트에 게시하며 추가적인 조사를 요구하는 곳도 있습니다. API 31을 지원하지 않는 SDK를 사용하는 경우 우선 SDK 제공업체와 함께 문제를 해결해야 합니다.

또한 앱이나 게임의 targetSdkVersion이 비공개 Android 플랫폼 라이브러리 액세스를 제한할 수 있습니다. 자세한 내용은 플랫폼 라이브러리에 연결되는 NDK 앱을 참고하세요.

사용 중인 Android 지원 라이브러리 버전에 있을 수 있는 모든 제한사항도 확인해야 합니다. 항상 Android 지원 라이브러리의 주요 버전과 앱의 compileSdkVersion이 호환되는지 확인해야 합니다.

지원 라이브러리의 주요 버전 이하의 targetSdkVersion을 선택하는 것이 좋습니다. 최신 호환 기능 및 버그 수정을 활용하려면 호환되는 최신 지원 라이브러리로 업데이트하는 것이 좋습니다.

앱 테스트

앱의 API 수준과 기능을 적절하게 업데이트한 후에는 몇 가지 핵심 사용 사례를 테스트해야 합니다. 다음 제안사항에 전체 내용이 포함된 것은 아니지만, 테스트 프로세스의 길잡이로 삼기에 좋습니다. 테스트에서 다음 항목을 확인하시기 바랍니다.

  • 앱이 오류나 경고 없이 API 29로 컴파일됩니다.
  • 앱이 사용자가 권한 요청을 거부하는 경우를 대비한 전략을 갖추고 있으며 사용자에게 권한 요청 메시지를 표시합니다. 방법은 다음과 같습니다.

    • 앱의 앱 정보 화면으로 이동하여 각 권한을 사용 중지합니다.
    • 앱을 열고 비정상 종료가 발생하지 않는지 확인합니다.
      • 핵심 사용 사례 테스트를 실행하고 필수 권한이 다시 표시되는지 확인합니다.
  • 잠자기가 예상대로 동작하고 오류가 발생하지 않습니다.

    • adb를 사용하여 앱이 실행되고 있을 때 테스트 기기를 잠자기로 설정합니다.
      • Firebase 클라우드 메시징 메시지를 트리거하는 사용 사례를 테스트합니다.
      • 알람 또는 작업을 사용하는 사용 사례를 테스트합니다.
      • 백그라운드 서비스의 종속 항목을 제거합니다.
    • 앱을 앱 대기 모드로 설정합니다.
      • Firebase 클라우드 메시징 메시지를 트리거하는 사용 사례를 테스트합니다.
      • 알람을 사용하는 사용 사례를 테스트합니다.
  • 새로운 사진/동영상 촬영이 정상적으로 처리됩니다.

    • 앱에서 제한된 ACTION_NEW_PICTURE ACTION_NEW_VIDEO 브로드캐스트를 제대로 처리하는지 확인합니다 (JobScheduler 작업으로 이동).
    • 이러한 이벤트에 의존하는 주요 사용 사례가 여전히 작동하는지 확인합니다.
  • 다른 앱과의 파일 공유 처리 - 다른 앱과 파일 데이터를 공유하는 사용 사례를 테스트합니다. 이는 같은 개발자의 다른 앱이더라도 마찬가지입니다.

    • 다른 앱에 콘텐츠가 표시되고 비정상 종료가 트리거되지 않는지 테스트합니다.

추가 정보

Google에서 월간 파트너 뉴스레터를 비롯한 Android 및 Google Play의 중요한 소식과 공지사항을 보내 드릴 수 있도록 Google Play Console에서 이메일 수신에 동의하세요.