Android 8.0으로 마이그레이션

Android 8.0 (API 레벨 26)에는 동작 변경사항뿐만 아니라 활용할 수 있습니다. 이 문서에서는 마이그레이션 단계를 간략하게 설명합니다. 앱을 Android 8.0으로 출시하는 데 큰 도움이 되었습니다.

  1. Android 8.0과의 호환성 보장

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

  2. 대상 버전 업데이트 및 Android 8.0 기능 사용

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

Android 8.0과의 호환성 보장

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

Android 8.0과의 호환성을 단계별로 보장

Android 8.0을 실행하는 기기 준비

  • 호환되는 기기 (Pixel, Pixel XL, Pixel C, Nexus 5X, Nexus 6P, Nexus)가 있는 경우 플레이어)의 다음 단계를 따르세요. 안내 플래시하기를 참조하세요.
  • 또는 Android Emulator용 Android 8.0 시스템 이미지를 다운로드합니다. 이 목록은 SDK ManagerGoogle API Intel x86 Atom 시스템 이미지로서의 Android 8.0.

    참고: Android 8.0 시스템 이미지는 다음에서 다운로드할 수 있습니다. Android 스튜디오 3.0 이상 자세한 내용은 아래 섹션을 참고하여 Android 8.0 SDK를 다운로드하세요.

호환성 테스트

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

하지만 테스트에는 또 다른 측면이 있습니다. Android 8.0에서는 Android의 개발자가 변경하지 않더라도 앱 동작에 영향을 미치거나 앱을 완전히 중단시킬 수 있는 내 targetSdkVersion 그렇기 때문에 살펴보고 변경사항을 수용하기 위해 구현하는 모든 수정사항을 테스트합니다.

표 1. 모든 앱에 영향을 미치는 주요 변경사항 Android 8.0 기기에서 실행됩니다.

변경 요약 추가 참조
백그라운드 위치 업데이트 빈도가 더 적음 앱이 백그라운드 서비스에서 위치 업데이트를 수신하는 경우 수신 빈도가 낮습니다. 의 업데이트를 비교해 보고 있습니다. 구체적으로는 서비스는 시간당 몇 번 이상 위치 업데이트를 받을 수 없습니다. 그러나 앱이 포그라운드에 있을 경우 위치 업데이트 속도는 변경되지 않습니다. <ph type="x-smartling-placeholder"></ph> 백그라운드 위치 제한
net.hostname가 더 이상 지원되지 않음 net.hostname 시스템 속성을 쿼리하면 null 결과가 생성됩니다. 없음
send(DatagramPacket)의 새로운 예외 send(DatagramPacket) 메서드에서 SocketException이 발생합니다. 이전에 실행한 connect(InetAddress, int) 메서드가 실패한 경우 <ph type="x-smartling-placeholder"></ph> 동작 변경사항: 네트워크 및 HTTP(S) 연결
다음의 적절한 NullPointerException: 메서드 AbstractCollection AbstractCollection.removeAll(null) 및 이제 AbstractCollection.retainAll(null)에서 항상 NullPointerException 이전에는 컬렉션이 비어 있을 때 NullPointerException이 발생하지 않았습니다. 이런 변경은 동작이 문서와 일치하도록 만듭니다. <ph type="x-smartling-placeholder"></ph> 동작 변경사항: 컬렉션 처리
다음의 적절한 NullPointerException: Currency.getDisplayName(null) Currency.getDisplayName(null)님에게 전화 거는 중 NullPointerException이 발생합니다. <ph type="x-smartling-placeholder"></ph> 동작 변경사항: 언어 및 다국어화

Android 8.0의 동작 변경사항 목록을 더 자세히 확인하려면 (API 수준 26) 또한 Android 8.0 동작 변경사항을 참고하세요.

타겟 버전 업데이트 및 Android 8.0 기능 사용

이 섹션에서는 Android 8.0을 완전히 지원하는 방법을 설명합니다. (API 수준 26)를 사용하려면 targetSdkVersion을 26으로 업데이트하세요. Android 8.0에서 사용할 수 있는 새로운 기능을 추가하는 것입니다.

Android 8.0에서는 새로운 API를 제공할 뿐만 아니라 targetSdkVersion를 26으로 업데이트하면 변경됩니다. 일부 동작이 변경되기 때문에 중단을 피하기 위해 코드 변경이 필요할 수 있으므로 먼저 앱이 어떻게 작동하는지 targetSdkVersion 변경 시 영향을 받습니다. 이를 위해 Android 8.0을 타겟팅하는 앱의 동작 변경사항을 모두 검토하세요.

참고: 위에서 설명한 단계를 수행하면 전제 조건인 플랫폼 호환성을 보장해야 함 앱을 Android 8.0으로 타겟팅하므로 이 단계를 먼저 완료해야 합니다.

단계별로 대상 버전을 업데이트하고 Android 8.0 기능 사용

Android 8.0 SDK 가져오기

Android 8.0에서 앱을 빌드하기 위해 SDK 패키지를 가져올 수 있습니다. (API 수준 26)에서 최신 버전의 API를 사용하는 경우 Android 스튜디오 (Android 스튜디오 3.0 이상 권장) Android 스튜디오 3.0 이상에는 Android 8.0 기능에 도움이 되는 도구가 포함되어 있습니다. 예를 들어 적응형 아이콘, 다운로드 가능한 글꼴을 제공합니다. 아직 이러한 기능이 필요하지 않다면 안정화 버전의 Android 스튜디오를 사용하면 됩니다. 2.3.3을 다운로드하여 Android 8.0으로 앱을 빌드하고 새로운 API를 사용하세요.

두 가지 버전의 Android 스튜디오를 설정하려면 다음 단계를 따르세요.

  1. Android 스튜디오를 시작하고 다음을 클릭하여 SDK Manager를 엽니다. 도구 > SDK Manager를 사용합니다.
  2. SDK Platforms 탭에서 Show Package Details를 선택합니다. 미만 Android 8.0 미리보기는 다음을 확인합니다. <ph type="x-smartling-placeholder">
      </ph>
    • Android SDK 플랫폼 26
    • Google API Intel x86 Atom 시스템 이미지 (에뮬레이터에만 필요)
  3. SDK Tools 탭으로 전환하고 사용 가능한 업데이트가 있는 모든 항목을 선택합니다. 대시()를 표시하는 각 체크박스 여기에는 다음 항목의 최신 버전이 포함되어야 합니다. 다음과 같습니다. <ph type="x-smartling-placeholder">
      </ph>
    • Android SDK 빌드 도구 26.0.0
    • Android SDK 플랫폼 도구 26.0.0
    • Android 에뮬레이터 26.0.0
  4. OK를 클릭하여 선택한 SDK 패키지를 모두 설치합니다.

이제 Android 8.0으로 빌드를 시작할 준비가 되었습니다.

빌드 구성 업데이트

compileSdkVersion 업데이트, 지원 라이브러리 버전(targetSdkVersion)을 사용 가능한 버전(예:

android {
  compileSdkVersion 26

  defaultConfig {
    targetSdkVersion 26
  }
  ...
}

dependencies {
  compile 'com.android.support:appcompat-v7:26.0.0'
}

// REQUIRED: Google's new Maven repo is required for the latest
// support library that is compatible with Android 8.0
repositories {
    google()

    // If you're using a version of Gradle lower than 4.1, you must instead use:
    // maven {
    //     url 'https://maven.google.com'
    // }
}

매니페스트 파일에서 브로드캐스트 수신기 제거

Android 8.0 (API 수준 26)은 새로운 제한사항 브로드캐스트 수신기의 경우, 브로드캐스트를 수신하기 전에 수신 가능한 모든 broadcast receiver를 암시적 브로드캐스트 인텐트에 등록되어 있어야 합니다. 그대로 두어도 앱이 중단되지 않습니다. 을 호출할 수 있지만 앱이 Android 8.0에서 실행될 때는 아무런 영향을 미치지 않습니다.

내 앱만 응답할 수 있는 브로드캐스트: 명시적 브로드캐스트 인텐트 특별히 앱의 패키지 이름으로 전송된 브로드캐스트를 수신할 수 없습니다. Android 8.0

이 새로운 제한에는 예외가 있습니다. Android 8.0을 타겟팅하는 앱에서 계속 작동하는 암시적 브로드캐스트 목록은 암시적 브로드캐스트 예외를 참고하세요.

Android 8.0 앱 테스트

위의 준비가 완료되면 앱을 빌드하고 또한 Android 8.0을 타겟팅할 때 제대로 작동하는지 확인합니다. (API 수준 26) 이 시점에서 핵심 앱 품질 가이드라인최고 테스트 권장사항을 참고하세요.

targetSdkVersion을 26으로 설정하여 앱을 빌드하면 알아야 할 특정한 플랫폼 변경사항이 있습니다. 일부 이러한 변경사항은 앱의 동작에 상당한 영향을 미치거나 심지어 새로운 기능을 구현하지 않더라도 앱을 완전히 기능을 살펴봅니다.

표 2는 이러한 변경사항 목록이며 상세 정보에 연결되는 링크를 함께 제공합니다.

표 2. 앱에 영향을 미치는 주요 변경사항 targetSdkVersion가 26으로 설정된 경우

변경 요약 추가 참조
개인정보 보호 Android 8.0 (API 수준 26)은 net.dns1, net.dns2, net.dns3 또는 net.dns4 시스템 속성. 동작 변경사항: 개인 정보 보호
쓰기 가능 및 실행 가능 세그먼트에 적용되는 규칙 네이티브 라이브러리의 경우, Android 8.0 (API 레벨 26)은 데이터는 실행 가능이어서는 안 되고, 코드는 쓰기가 가능하지 않아야 합니다. 동작 변경사항: 네이티브 라이브러리
ELF 헤더 및 섹션 유효성 검사 동적 링커는 ELF 헤더에서 더 많은 값을 확인함 및 섹션 머리글이 있으며, 유효하지 않은 경우 실패합니다. 동작 변경사항: 네이티브 라이브러리
알림 SDK의 Android 8.0 (API 수준 26) 버전을 타겟팅하는 앱 하나 이상의 알림 채널을 구현해야 사용자에게 알림을 전송합니다. API 개요: 알림
List.sort() 메서드 이 메서드의 구현으로 더 이상 Collections.sort()를 호출할 수 없거나 스택 오버플로로 인해 앱에서 예외가 발생합니다. 동작 변경사항: 컬렉션 처리
Collections.sort() 메서드 List 구현에서 이제 Collections.sort()이 발생합니다. ConcurrentModificationException입니다. 행동 변경사항: 컬렉션 처리

Android 8.0 (API 레벨 26)의 동작 변경사항 목록을 더 자세히 살펴보려면 Android 8.0 동작 변경사항을 참고하세요.

Android 8.0 (API 레벨 26)에서 사용할 수 있는 새로운 기능과 API를 살펴보려면 Android 8.0 기능 및 API