Android 9 (API 수준 28)에는 새로운 동작 변경사항과 더불어 새로운 기능을 앱에서 활용할 수 있게 됩니다. 이 문서에서는 마이그레이션 단계를 간략하게 설명합니다. 앱을 Android 9으로 출시하는 데 큰 도움이 되었습니다.
- Android 9과의 기본 호환성 보장
새로운 버전의 플랫폼에서 기존 앱이 올바로 작동하는지 확인합니다. 이 단계에서는 새 API를 사용하거나 앱의
targetSdkVersion
를 변경하지 않습니다. 사소한 변경이 필요할 수 있습니다 - 새로운 플랫폼을 타겟팅하고, Android 9 SDK로 컴파일하고, Android 9 기능으로 빌드
Google의 새로운 기능을 활용하실 준비가 되셨다면
targetSdkVersion
을28
로 업데이트하고 앱이 계속 진행되는지 확인합니다. 새 API를 사용하기 시작할 수 있습니다.
Android 9이 실행되는 기기 준비
호환되는 기기가 있는 경우 제조업체로부터 기기의 Android 9 시스템 이미지를 구합니다. Pixel 기기의 공장 출고 시 이미지는 여기를 클릭하세요. 일반적인 도움말 시스템 이미지를 플래시하는 방법은 여기를 참조하세요.
또한 Android Emulator용 Android 9 시스템 이미지를 다운로드할 수도 있습니다. 이 목록은 SDK Manager에 Google API Intel x86 Atom 시스템 이미지로서의 Android API 28.
참고: Android 9 에뮬레이터 시스템 이미지는 Android 스튜디오 3.1 이상에서 다운로드가 가능하며, Android 스튜디오 3.2가 호환성이 가장 좋습니다. 자세한 내용은 Android 9 SDK 가져오기를 참고하세요.
Android 9과의 호환성 보장
여기서의 목표는 기존 앱이 있는 그대로 작동하도록 하는 것입니다.
Android 9. 일부 플랫폼 변경사항은 앱의 작동 방식에 영향을 미칠 수도 있으므로 일부 조정은 꼭 필요할 수 있지만, 새로운 API를 사용하거나 targetSdkVersion
을 변경할 필요는 없습니다.
호환성 테스트
대부분의 경우 Android 9와의 호환성 테스트 앱 출시를 준비할 때와 동일한 유형의 테스트가 필요합니다. 이 시점에서 핵심 앱 품질 가이드라인과 테스트 권장사항을 검토하는 것이 좋습니다.
하지만 테스트에는 또 다른 측면이 있습니다. Android 9에서는
개발자가 변경하지 않더라도 앱 동작에 영향을 미치거나 앱을 완전히 중단시킬 수 있는 플랫폼
내 targetSdkVersion
따라서 표 1의 주요 변경사항을 검토하고 이러한 변경사항을 수용하기 위해 구현하는 모든 수정사항을 테스트하는 것이 중요합니다.
표 1. 모든 앱에 영향을 미치는 주요 변경사항 Android 9 기기에서 실행됩니다.
변경 | 요약 |
---|---|
비 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로 설정하여 앱을 빌드하면
알아야 할 특정한 플랫폼 변경사항이 있습니다. 일부
이러한 변경사항은 앱의 동작에 상당한 영향을 미치거나 심지어
새로운 기능을 구현하지 않더라도 앱을 완전히
기능을 살펴봅니다.
표 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