앱 을 Android 9 으로 마이 그레 이 션 | Android Developers 
 앱 을 Android 9 으로 마이 그레 이 션 
 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 9 아래 Google APIs Intel x 86 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 인터페이스 에 대한 액세스 가 차단 됩니다 . 제한 된 인터페이스 에 액세스 하 려고 시도 하 면 NoSuchFieldException 및 NoSuchMethodException 과 같 은 오류 가 발생 합니다 . 자세 한 정보 는 비 SDK 인터페이스 에 대한 제한 을 참조 하 세요 . 
 Crypto 제공 자 제거 Android 9 부터 Crypto JCA 제공 자 가 제거 되 었 습니다 . SecureRandom . getInstance ( " SHA 1 PRNG ", " 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 를 참조 하 세요 .