6월 3일의 ⁠#Android11: 베타 버전 출시 행사에 참여하세요.

앱을 Android 8.0로 마이그레이션

Android 8.0에서는 여러 가지 새로운 기능과 API가 도입됩니다. 또한 여러분이 아무런 변경을 수행하지 않아도 앱 동작에 영향을 미칠 수 있는 여러 변경사항이 있습니다. 여러분의 준비를 돕기 위해, 이 페이지에서는 호환성 테스트를 수행하는 방법과 새로운 Android 8.0 기능을 사용하기 위해 앱을 업데이트하는 방법에 대해 설명합니다.

  1. 플랫폼 호환성 보장

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

  2. Android 8.0 SDK를 사용하여 앱 빌드

    플랫폼의 새로운 기능을 이용할 준비가 되었다면 targetSdkVersion을 "O"로 업데이트하고, 앱이 예상대로 작동하는지 확인한 다음 새로운 API의 사용을 시작합니다.

플랫폼 호환성 보장

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

Android 8.0가 실행되는 기기 준비

호환성 테스트 수행

대부분의 경우, Android 8.0의 호환성 테스트는 앱 출시를 준비할 때 수행하는 테스트와 동일한 유형을 따릅니다. 이 시점에서 핵심 앱 품질 가이드라인테스트 모범 사례를 검토하는 것이 좋습니다.

그러나 이 테스트에는 또 다른 측면이 있습니다. Android 8.0는 Android 플랫폼을 변경한 것이며, 이러한 변경은 여러분이 targetSdkVersion을 변경하지 않더라도 앱 동작에 영향을 미치거나 앱을 완전히 중단시킬 수 있습니다. 따라서, 표 1의 주요 변경사항을 검토하고 이러한 변경을 구현하는 데 필요한 수정사항을 테스트하는 것이 중요합니다.

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

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

Android 8.0의 동작 변경 사항에 대한 상세 목록은 Android 8.0 동작 변경 사항을 참조하세요.

Android 8.0 기능을 사용하여 앱 빌드

Android 8.0에서는 새로운 API를 제공할 뿐만 아니라 targetSdkVersion을 업데이트할 때 다른 동작 변경을 유발합니다(표 2에 설명). 이 섹션에서는 새로운 플랫폼을 대상으로 Android 8.0 API의 변경사항과 새로운 기능을 빌드하고 테스트하기 위한 개발 환경을 구성하는 방법에 대해 설명합니다.

참고: 플랫폼 호환성을 보장하기 위해 위에 설명된 단계는 Android 8.0 빌드를 위한 전제 조건이므로, 이 단계를 먼저 완료해야 합니다.

Android 8.0 SDK 가져오기

  1. Android Studio 3.0 Canary를 설치합니다.

    Android 8.0에서 사용 가능한 새로운 개발자 기능을 모두 지원하는 것은 Android Studio 3.0뿐입니다. 따라서 Android 8.0 SDK 사용을 시작하려면 먼저 Canary 버전의 Android Studio 3.0를 구해야 합니다. 그러나 안정적인 버전의 Android Studio 설치는 그대로 유지할 수 있습니다.

  2. Android Studio 3.0를 시작하고 Tools > Android > SDK Manager를 클릭하여 SDK Manager를 엽니다.
  3. SDK Platforms 탭에서 Show Package Details를 선택합니다. Android 8.0 Preview 아래에서 다음을 선택합니다.
    • Android SDK Platform O
    • Google APIs Intel x86 Atom 시스템 이미지 (에뮬레이터에만 필요)
  4. SDK Tools 탭으로 전환하고, 사용 가능한 업데이트가 있는 모든 항목을 선택합니다(대시 가 표시된 각 확인란을 클릭). 여기에는 다음과 같은 필수 항목이 포함되어야 합니다.
    • Android SDK Build-Tools 26.0.0 (rc2 이상)
    • Android SDK Platform-Tools 26.0.0 (rc2 이상)
    • Android Emulator 26.0.0
    • Support Repository
  5. OK를 클릭하여 선택한 SDK 패키지를 모두 설치합니다.

이제 Android 8.0로 개발을 시작할 준비가 되었습니다.

빌드 구성 업데이트

compileSdkVersion, buildToolsVersion, targetSdkVersion 및 지원 라이브러리 버전을 다음 버전으로 업데이트합니다.

android {
  compileSdkVersion 'android-O'
  buildToolsVersion '26.0.0-rc2'

  defaultConfig {
    targetSdkVersion 'O'
  }
  ...
}

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

// REQUIRED: Google's new Maven repo is required for the latest
// support library that is compatible with Android 8.0
repositories {
    maven {
        url 'https://maven.google.com'
    }
}

이 구성으로는 앱을 게시할 수 없습니다. "O" 버전은 Android 8.0 중의 개발과 테스트에만 사용 가능한 임시 API 레벨입니다. 최종 API 레벨이 출시될 때까지는 Android 8.0 변경사항 게시를 기다려야 하며, 그 후에 구성을 다시 업데이트해야 합니다.

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

Android 8.0에는 브로드캐스트 수신기에 대한 새로운 제한이 있으므로, 암시적 브로드캐스트 인텐트용으로 등록된 모든 브로드캐스트 수신기를 제거해야 합니다. 이 수신기를 그대로 두더라도 빌드 시나 런타임에 앱이 중단되지는 않지만, Android 8.0에서 앱이 실행될 때 어떠한 영향도 미치지 않습니다.

명시적 브로드캐스트 인텐트(여러분의 앱만이 응답할 수 있는 인텐트)는 Android 8.0에서도 동일하게 계속 작동합니다.

이 새로운 제한에는 예외가 있습니다. Android 8.0를 대상으로 하는 앱에서 여전히 작동하는 암시적 브로드캐스트 목록은 암시적 브로드캐스트 예외를 참조하세요.

Android 8.0 앱 테스트

위와 같은 준비가 완료되면, 앱을 빌드한 후 Android 8.0를 대상으로 이 앱이 올바로 작동하는지 확인하기 위해 테스트를 수행할 수 있습니다. 이 시점에서 또 다시 핵심 앱 품질 가이드라인테스트 모범 사례를 검토하는 것이 좋습니다.

Android 8.0에 대해 targetSdkVersion을 설정하고 앱을 빌드하는 경우 여러분이 알아야 하는 특정한 플랫폼 변경사항이 있습니다. 이러한 변경사항 중 일부는 여러분이 Android 8.0에서 새 기능을 구현하지 않더라도 앱 동작에 상당한 영향을 미치거나 심지어 앱을 완전히 중단시킬 수도 있습니다.

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

표 2. targetSdkVersion이 "O"로 설정된 경우 앱에 영향을 미치는 주요 변경사항.

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

Android 8.0의 동작 변경 사항에 대한 상세 목록은 Android 8.0 동작 변경 사항을 참조하세요.

Android 8.0에서 사용 가능한 새로운 기능과 API를 살펴보려면 Android 8.0 기능 및 API를 참조하세요.