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

Android 9 (API 수준 28)에는 새로운 동작 변경사항과 더불어 새로운 기능을 앱에서 활용할 수 있게 됩니다. 이 문서에서는 마이그레이션 단계를 간략하게 설명합니다. 앱을 Android 9으로 출시하는 데 큰 도움이 되었습니다.

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

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

  2. 새로운 플랫폼을 타겟팅하고, Android 9 SDK로 컴파일하고, Android 9 기능으로 빌드

    Google의 새로운 기능을 활용하실 준비가 되셨다면 targetSdkVersion28로 업데이트하고 앱이 계속 진행되는지 확인합니다. 새 API를 사용하기 시작할 수 있습니다.

Android 9이 실행되는 기기 준비

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

또한 Android Emulator용 Android 9 시스템 이미지를 다운로드할 수도 있습니다. 이 목록은 SDK ManagerGoogle 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와의 호환성 테스트 앱 출시를 준비할 때와 동일한 유형의 테스트가 필요합니다. 이 시점에서 핵심 앱 품질 가이드라인테스트 권장사항을 검토하는 것이 좋습니다.

하지만 테스트에는 또 다른 측면이 있습니다. Android 9에서는 개발자가 변경하지 않더라도 앱 동작에 영향을 미치거나 앱을 완전히 중단시킬 수 있는 플랫폼 내 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 기능 단계별 사용

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