앱을 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 API 28 아래에 Google API Intel x86 Atom System Image로 표시되어 있습니다.

참고: Android 9 에뮬레이터 시스템 이미지는 Android 스튜디오 3.1 이상에서 다운로드할 수 있습니다. Android 스튜디오 3.2가 최대한의 호환성을 제공합니다. 자세한 내용은 Android 9 SDK 가져오기를 참고하세요.

Android 9과의 호환성 보장

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

단계별로 Android 9와의 호환성 보장

호환성 테스트

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

그러나 테스트하는 또 다른 측면이 있습니다. Android 9에서는 targetSdkVersion를 변경하지 않더라도 앱 동작에 영향을 미치거나 앱을 완전히 중단할 수 있는 Android 플랫폼 변경사항을 도입합니다. 따라서 표 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 기능 단계별 사용

Android 9 SDK 가져오기

Android 스튜디오 3.1 이상을 사용하여 Android 9로 앱을 빌드하기 위한 SDK 패키지를 가져올 수 있습니다. 아직 Android 9의 새로운 기능은 필요하지 않고 이 버전의 플랫폼에서만 컴파일하려면 Android 스튜디오 3.1을 사용하면 됩니다. Android 스튜디오 3.2는 Android 9 기능을 완벽하게 지원합니다.

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 데이터 디렉토리를 공유할 수 없습니다. 앱에 WebView, CookieManager 또는 android.webkit 패키지의 다른 API를 사용하는 프로세스가 두 개 이상 있는 경우 두 번째 프로세스에서 WebView 메서드를 호출하면 앱이 비정상 종료됩니다.
앱의 데이터 디렉토리에 대한 액세스가 SELinux에 의해 차단됨 시스템은 각 앱의 비공개 데이터 디렉터리에 앱별 SELinux 제한과 함께 앱별 SELinux 샌드박스를 적용합니다. 이제 경로를 통해 다른 앱의 데이터 디렉터리에 직접 액세스하는 것이 허용되지 않습니다. 앱은 FD 전달을 포함한 IPC 메커니즘을 사용하여 데이터를 계속 공유할 수 있습니다.

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

Android 9에서 사용할 수 있는 새로운 기능과 API를 살펴보려면 Android 9 기능 및 API를 참고하세요.