앱을 Android 9으로 마이그레이션

Android 9(API 레벨 28)에서는 새로운 동작 변경사항뿐만 아니라 앱에서 활용할 수 있는 새로운 기능과 API를 소개합니다. 이 문서에서는 Android 9으로 마이그레이션하기 위한 두 가지 핵심 단계에 대해 간략히 설명합니다.

  1. Android 9과의 기본 호환성 보장

    새로운 버전의 플랫폼에서 기존 앱이 올바로 작동하는지 확인합니다. 이 단계에서는 새로운 API를 사용하거나 앱의 targetSdkVersion을 변경하진 않지만, 사소한 변경이 필요할 수도 있습니다.

  2. 새로운 플랫폼을 대상으로 하고, Android 9 SDK를 사용하여 컴파일하고, Android 9 기능을 사용하여 빌드

    플랫폼의 새로운 기능을 이용할 준비가 되었다면 targetSdkVersion28로 업데이트하고 앱이 계속해서 예상대로 작동하는지 확인한 다음 새로운 API의 사용을 시작합니다.

Android 9이 실행되는 기기 준비

호환되는 기기가 있는 경우, 기기의 Android 9 시스템 이미지를 제조업체로부터 구합니다. Pixel 기기의 공장 출고 시 이미지는 여기를 클릭하세요. 시스템 이미지를 플래시하기 위한 일반 지침은 여기를 참조하세요.

또한 Android Emulator용 Android 9 시스템 이미지를 다운로드할 수도 있습니다. 이 이미지는 SDK ManagerAndroid 9 아래 Google APIs Intel x86 Atom 시스템 이미지에 나열되어 있습니다.

참고: Android 9 에뮬레이터 시스템 이미지는 Android Studio 3.1 이상에서 다운로드가 가능하며, Android Studio 3.2가 호환성이 가장 좋습니다. 자세한 내용은 Android 9 SDK 가져오기를 참조하세요.

Android 9과의 호환성 보장

여기서의 목표는 Android 9에서 기존 앱이 제대로 작동하는지 확인하는 것입니다. 일부 플랫폼 변경사항은 앱의 작동 방식에 영향을 미칠 수도 있으므로 일부 조정은 꼭 필요할 수 있지만, 새로운 API를 사용하거나 targetSdkVersion을 변경할 필요는 없습니다.

호환성 테스트 수행

대부분의 경우, Android 9의 호환성 테스트는 앱 출시를 준비할 때 수행하는 테스트와 동일한 유형을 따릅니다. 이 시점에서 핵심 앱 품질 가이드라인테스트 모범 사례를 검토하는 것이 좋습니다.

그러나 이 테스트에는 또 다른 측면이 있습니다. Android 9은 Android 플랫폼을 변경한 것이며, 이러한 변경은 여러분이 targetSdkVersion을 변경하지 않더라도 앱 동작에 영향을 미치거나 앱을 완전히 중단시킬 수 있습니다. 따라서, 표 1의 주요 변경사항을 검토하고 이러한 변경을 구현하는 데 필요한 수정사항을 테스트하는 것이 중요합니다.

표 1. Android 9 기기에서 실행되는 모든 앱에 영향을 미치는 주요 변경사항.

변경사항 요약
비 SDK 인터페이스에 대한 제한 이제 직접 액세스인지 JNI를 통한 액세스인지 아니면 리플렉션을 통한 액세스인지 상관 없이 특정 비 SDK 인터페이스에 대한 액세스가 차단됩니다. 제한된 인터페이스에 액세스하려고 시도하면 NoSuchFieldExceptionNoSuchMethodException과 같은 오류가 발생합니다. 자세한 정보는 비 SDK 인터페이스에 대한 제한을 참조하세요.
Crypto 제공자 제거 Android 9부터 Crypto JCA 제공자가 제거되었습니다. SecureRandom.getInstance("SHA1PRNG", "Crypto")를 호출하면 NoSuchProviderException이 발생합니다.
엄격해진 UTF-8 디코더 Android 9에서는 Java 언어의 UTF-8 디코더가 더욱 엄격하며 Unicode 표준을 따릅니다.
유휴 앱의 경우 카메라, 마이크 및 센서에 대한 액세스 차단 앱이 유휴 상태인 경우 카메라, 마이크 또는 SensorManager 센서에 더 이상 액세스할 수 없습니다.

Android 9에서 실행되는 모든 앱의 동작 변경사항 목록을 더 자세히 보려면 동작 변경사항 문서를 참조하세요.

대상 버전 업데이트 및 Android P 기능 사용

이 섹션에서는 targetSdkVersion을 28로 업데이트하고 Android 9에서 제공되는 새로운 기능을 추가하여 Android 9을 최대로 지원하는 방법에 대해 설명합니다.

Android 9에서는 새로운 API를 제공할 뿐만 아니라 targetSdkVersion을 28로 업데이트할 때 몇 가지 동작 변경사항이 도입됩니다. 몇몇 동작 변경사항의 경우에는 중단을 피하기 위해 코드 변경이 필요할 수도 있지만, 먼저 Android 9을 대상으로 하는 앱의 모든 동작 변경사항을 검토하여 targetSdkVersion을 변경하면 앱에 어떤 영향이 있는지 이해해야 합니다.

참고: 위에 설명된 플랫폼 호환성을 보장하기 위한 단계는 Android 9을 대상으로 하는 앱의 전제 조건이므로, 이 단계를 먼저 완료해야 합니다.

Android 9 SDK 가져오기

Android Studio 3.1 이상을 사용하여 Android 9으로 앱을 빌드하기 위해 SDK 패키지를 가져올 수 있습니다. Android 9의 새로운 기능은 아직 필요 없고 이 플랫폼 버전에 대해 컴파일만 수행하려는 경우에는 Android Studio 3.1을 사용할 수 있습니다. Android Studio 3.2에서는 Android 9 기능을 완벽하게 지원합니다.

어느 버전이든 Android Studio를 설치하려면, Preview SDK 설치에 설명된 단계를 따르세요.

Android 9 앱 테스트

위의 준비가 완료되면, Android 9(API 레벨 28)을 대상으로 할 때 앱이 적절히 작동하도록 앱을 빌드하고 추가적인 테스트를 수행할 수 있습니다. 이 시점에서 핵심 앱 품질 가이드라인테스트 모범 사례를 검토하는 것이 좋습니다.

targetSdkVersion을 P로 설정하고 앱을 빌드하는 경우 알아야 하는 특정한 플랫폼 변경사항이 있습니다. 이러한 변경사항 중 일부는 Android 9에서 새 기능을 구현하지 않더라도 앱 동작에 상당한 영향을 미치거나 심지어 앱을 완전히 중단시킬 수도 있습니다.

표 2는 이러한 변경사항 목록이며 상세 정보에 연결되는 링크를 함께 제공합니다.

표 2. targetSdkVersion이 28로 설정된 경우 앱에 영향을 미치는 주요 변경사항

변경사항 요약
포그라운드 서비스 권한 이제 포그라운드 서비스를 사용하려는 앱은 먼저 FOREGROUND_SERVICE 권한을 요청해야 합니다. 이 권한은 정상 권한이므로 시스템은 요청 앱에 자동으로 권한을 부여합니다. 이 권한 없이 포그라운드 서비스를 시작하면 SecurityException이 발생합니다.
Bouncy Castle 암호화 지원 중단 Android 9에서는 Bouncy Castle 제공자가 제공하는 여러 암호화가 지원 중단되고 Conscrypt 제공자가 제공하는 암호화가 대신 사용됩니다. Bouncy Castle 제공자를 요청하는 getInstance() 호출은 NoSuchAlgorithmException 오류를 생성합니다. 이 오류를 해결하려면 getInstance()에서 제공자를 지정하지 마십시오(즉, 기본 구현 요청).
Build.serial에 대한 직접 액세스 제거 Build.serial 식별자가 필요한 앱은 이제 READ_PHONE_STATE 권한을 요청한 다음 Android 9에 추가된 새 Build.getSerial() 메서드를 사용해야 합니다.
WebView 데이터 디렉토리의 공유 불가 앱이 더 이상 여러 프로세스에서 단일 WebView 데이터 디렉토리를 공유할 수 없습니다. 앱에 android.webkit 패키지의 WebView, CookieManager 또는 기타 API를 사용하는 프로세스가 2개 이상 있는 경우, 두 번째 프로세스에서 WebView 메서드를 호출하면 앱이 중단됩니다.
앱의 데이터 디렉토리에 대한 액세스가 SELinux에 의해 차단됨 시스템은 각 앱의 비공개 데이터 디렉토리에 대한 앱별 SELinux 제한과 함께 앱별 SELinux 샌드박스를 적용합니다. 이제 경로를 통해 다른 앱의 데이터 디렉토리에 직접 액세스하는 것은 허용되지 않습니다. 앱이 FD 전달을 포함한 IPC 메커니즘을 사용하여 데이터를 계속 공유할 수도 있습니다.

Android 9을 대상으로 하는 앱의 동작 변경사항 목록을 더 자세히 보려면 동작 변경사항 문서를 참조하세요.

Android 9에서 사용 가능한 새로운 기능과 API에 대해 살펴보려면 Android 9 기능 및 API를 참조하세요.