Android 9 (API 수준 28)에서는 새로운 동작 변경사항뿐 아니라 앱에서 활용할 수 있는 새로운 기능과 API가 도입되었습니다. 이 문서에서는 두 가지 주요 단계를 통해 앱을 Android 9로 이전하는 단계를 간략하게 설명합니다.
- Android 9와의 기본 호환성 보장
새로운 버전의 플랫폼에서 기존 앱이 올바로 작동하는지 확인합니다. 이 단계에서는 새 API를 사용하거나 앱의
targetSdkVersion
를 변경하지 않지만 사소한 변경이 필요할 수 있습니다. - 새 플랫폼을 타겟팅하고, Android 9 SDK로 컴파일하고, Android 9 기능으로 빌드
플랫폼의 새로운 기능을 활용할 준비가 되면
targetSdkVersion
를28
로 업데이트하고 앱이 계속 정상적으로 작동하는지 확인한 다음 새 API를 사용하기 시작합니다.
Android 9이 실행되는 기기 준비
호환되는 기기가 있다면 제조업체로부터 해당 기기에 맞는 Android 9 시스템 이미지를 받습니다. Pixel 기기용 공장 출고 시 이미지를 확인하려면 여기를 클릭하세요. 시스템 이미지를 플래시하는 방법에 관한 일반적인 안내는 여기를 참조하세요.
또한 Android Emulator용 Android 9 시스템 이미지를 다운로드할 수도 있습니다. SDK Manager의 Android 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에서는 targetSdkVersion
를 변경하지 않더라도 앱 동작에 영향을 미치거나 앱을 완전히 중단할 수 있는 Android 플랫폼 변경사항을 도입합니다. 따라서 표 1의 주요 변경사항을 검토하고 변경사항을 수용하기 위해 구현하는 모든 수정사항을 테스트하는 것이 중요합니다.
변경 | 요약 |
---|---|
비 SDK 인터페이스 제한사항 |
직접 액세스인지, JNI를 통한 액세스인지 또는 리플렉션을 통한 액세스인지 여부와 상관없이 이제 특정 비 SDK 인터페이스에 관한 액세스가 차단됩니다. 제한된 인터페이스에 액세스하려고 하면 NoSuchFieldException 및 NoSuchMethodException 와 같은 오류가 발생합니다.
자세한 내용은 비 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 스튜디오 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는 이러한 변경사항 목록이며 상세 정보에 연결되는 링크를 함께 제공합니다.
변경 | 요약 |
---|---|
포그라운드 서비스 권한 | 이제 포그라운드 서비스를 사용하려는 앱은 먼저 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를 사용하는 프로세스가 두 개 이상 있는 경우 두 번째 프로세스에서 WebView 메서드를 호출하면 앱이 비정상 종료됩니다. |
앱의 데이터 디렉토리에 대한 액세스가 SELinux에 의해 차단됨 | 시스템은 각 앱의 비공개 데이터 디렉터리에 앱별 SELinux 제한이 있는 앱별 SELinux 샌드박스를 적용합니다. 경로를 통해 다른 앱의 데이터 디렉터리에 직접 액세스하는 것은 이제 허용되지 않습니다. 앱은 FD 전달을 포함하여 IPC 메커니즘을 사용하여 데이터를 계속 공유할 수 있습니다. |
Android 9을 타겟팅하는 앱의 동작 변경사항 목록을 더 자세히 보려면 동작 변경사항 문서를 참조하세요.
Android 9에서 사용할 수 있는 새로운 기능과 API를 살펴보려면 Android 9 기능 및 API를 참고하세요.