page.title=동작 변경 page.keywords=preview,sdk,compatibility meta.tags="프리뷰", "호환성" page.tags="preview", "developer preview" page.image=images/cards/card-n-changes_2x.png @jd:body

이 문서의 내용

  1. 성능 향상
    1. Doze
    2. 백그라운드 최적화
  2. 권한 변경
  3. 접근성 향상
    1. 화면 확대/축소
    2. 설정 마법사에서의 비전 설정
  4. 플랫폼 라이브러리에 연결되는 NDK 앱
  5. Android for Work

참고 항목

  1. Android N API 개요

Android N에는 새로운 기능 및 성능과 함께 시스템 및 API 동작의 다양한 변경사항이 포함되어 있습니다. 이 문서에서는 개발자 여러분이 숙지해야 하고 앱을 개발할 때 감안해야 하는 몇 가지 주요 변경 내용을 소개하겠습니다.

이전에 Android용 앱을 게시한 적이 있는 경우, 이와 같은 플랫폼 변경으로 인해 앱이 영향을 받을 수 있다는 점을 유의하세요.

성능 향상

Android N에는 기기의 배터리 수명, RAM 사용량 및 앱 성능을 개선하기 위한 시스템 동작 변경이 포함됩니다. 이러한 변경은 시스템 리소스의 가용성과 앱에 대한 시스템 알림에 영향을 미칠 수 있습니다. 이러한 변경을 검토하고 이 변경에 맞게 앱을 조정하는 방법을 평가해야 합니다.

Doze

Android 6.0(API 레벨 23)에서 소개된 Doze 기능은 사용자가 기기의 플러그를 뽑고 정지 상태에서 화면이 꺼져있을 때 CPU 및 네트워크 액티비티를 지연시켜서 배터리 수명을 개선해 줍니다. Android N에서는 기기의 플러그를 뽑고 화면이 꺼져있는 동안 CPU 및 네트워크 제한의 일부를 적용하여 Doze의 기능을 더욱 향상시켜 주지만 반드시 정지 상태일 필요는 없습니다(예: 핸드셋을 사용자의 주머니에 넣고 다니는 경우).

그림 1. Doze가 첫 번째 레벨의 시스템 액티비티 제한을 적용하여 배터리 수명을 개선하는 방법에 대한 그림.

기기가 배터리 전원에 연결되고 일정 시간 동안 화면이 꺼져있는 경우, 기기가 Doze로 진입하고 첫 번째 하위 세트의 제한을 적용합니다. 기기는 앱 네트워크 액세스를 차단하고, 작업 및 동기화를 지연시킵니다. 기기가 Doze로 진입한 후 일정 시간 동안 정지 상태에 있으면, 시스템은 Doze 제한의 나머지를 {@link android.os.PowerManager.WakeLock}, {@link android.app.AlarmManager} 알람, GPS 및 Wi-Fi 스캔에 적용합니다. 일부 Doze 제한이 적용되든 모든 Doze 제한이 적용되든 간에 시스템은 잠시 동안의 유지관리 기간 중에 기기를 깨우며, 이 기간 중에 애플리케이션의 네트워크 액세스가 허용되고 지연된 작업/동기화가 실행됩니다.

그림 2. 기기가 일정 시간 동안 정지 상태에 있은 후에 Doze가 두 번째 레벨의 시스템 액티비티 제한을 적용하는 방법에 대한 그림.

참고로, 화면을 활성화하거나 기기의 플러그를 꽂으면 Doze 모드가 종료되고 이러한 처리 제한이 제거됩니다. Doze 및 앱 대기 모드 최적화에서 설명한 대로, Android 6.0(API 레벨 23)에서 소개된 이전 버전의 Doze에 앱을 적용시킬 때는, 이러한 추가적인 동작이 권장사항과 모범 사례에 영향을 미치지 않습니다. 하지만 여전히 해당 권장사항을 따라야 합니다. 예를 들어, GCM(Google Cloud Messaging)을 사용하여 메시지를 송수신하고, 추가적인 Doze 동작을 수용하기 위한 업데이트 계획을 시작해야 합니다.

Project Svelte: 백그라운드 최적화

Android N에서는 메모리 사용량 및 전원 소비량을 최적화하기 위해 세 가지 암시적 브로드캐스트를 제거합니다. 이러한 변경이 필요한 이유는 암시적 브로드캐스트는 백그라운드에서 브로드캐스트를 수신하도록 등록된 앱을 자주 시작하기 때문입니다. 이 브로드캐스트를 제거하면 기기 성능과 사용자 경험이 상당히 향상될 수 있습니다.

모바일 기기의 경우 연결 변경이 빈번하게 나타납니다(예: Wi-Fi와 모바일 데이터 간의 이동 시). 현재는 매니페스트에서 암시적 {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION} 브로드캐스트의 수신기를 등록하는 방식으로 앱이 이러한 연결 변경을 모니터링할 수 있습니다. 많은 앱들이 이 브로드캐스트를 수신하도록 등록하기 때문에, 단일 네트워크 스위치가 모든 앱들을 깨울 수 있으며 브로드캐스트를 동시에 처리할 수 있습니다.

마찬가지로, 앱은 다른 앱(예: 카메라)에서 암시적 {@link android.hardware.Camera#ACTION_NEW_PICTURE} 및 {@link android.hardware.Camera#ACTION_NEW_VIDEO} 브로드캐스트를 수신하도록 등록할 수 있습니다. 사용자가 카메라 앱으로 사진을 찍으면, 이들 앱이 깨어나고 브로드캐스트를 처리합니다.

이러한 문제를 완화하기 위해, Android N은 다음과 같은 최적화를 적용합니다.

차기 Android 릴리스에서는 바인딩이 해제된 백그라운드 서비스 뿐만 아니라 추가적인 암시적 브로드캐스트가 사용 중단될 수도 있습니다. 이러한 이유로, 백그라운드 서비스에 대한 종속성 뿐만 아니라 암시적 브로드캐스트의 매니페스트-선언 수신기에 대한 종속성을 피하거나 제거해야 합니다.

Android 프레임워크는 암시적 브로드캐스트 또는 백그라운드 서비스의 필요성을 줄이기 위한 여러 가지 해결책을 제공합니다. 예를 들어, {@link android.app.job.JobScheduler} API는 지정된 조건(예: 비 데이터 통신 네트워크에 연결)이 충족될 경우 네트워크 운영을 예약할 수 있는 강력한 메커니즘을 제공합니다. 심지어는 {@link android.app.job.JobScheduler}를 사용하여 콘텐츠 제공자의 변경에 대응할 수도 있습니다.

이러한 동작 변경과 앱을 적용하는 방법에 대한 자세한 내용은 백그라운드 최적화를 참조하세요.

권한 변경

Android N에는 사용자 계정 권한 및 외부 저장소에 쓰기 위한 새 권한을 비롯하여 앱에 영향을 미칠 수도 있는 권한 변경이 포함되어 있습니다. 다음은 프리뷰에서 변경된 권한의 간추린 내용입니다.

접근성 향상

Android N에는 시력이 안좋거나 손상된 사용자를 위해 플랫폼의 가용성을 개선하려는 변경이 포함됩니다. 이러한 변경은 일반적으로 앱의 코드 변경을 요구하지는 않지만, 사용자 경험에 미치는 잠재적인 영향을 평가하기 위해 이러한 기능을 검토하고 앱으로 테스트해야 합니다.

화면 확대/축소

Android N에서는 사용자가 Display size를 설정할 수 있습니다. 이 설정은 화면의 모든 요소를 확대하거나 축소하므로, 시력이 안좋은 사용자의 기기 접근성이 향상됩니다. 최소 화면 너비가 sw320dp를 초과하는 화면은 사용자가 확대/축소할 수 없으며, 이는 일반적인 중간 사이즈 전화기인 Nexus 4의 너비입니다.

그림 3. 오른쪽 화면은 Android N 시스템 이미지가 실행 중인 기기의 Display size를 늘릴 때의 효과를 보여줍니다.

기기 밀도가 변경되면, 시스템은 다음과 같은 방식으로 실행 중인 앱에게 알립니다.

앱이 Android 모범 사례를 따르기만 한다면, 대부분의 앱은 이 기능을 지원하기 위해 어떠한 변경도 할 필요가 없습니다. 확인할 사항:

설정 마법사에서의 비전 설정

Android N에는 Welcome 화면에 Vision Settings가 포함되어 있으며, 여기서 사용자가 새 기기에 다음과 같은 접근성 설정을 구성할 수 있습니다: Magnification gesture, Font size, Display sizeTalkBack. 이 변경은 다른 화면 설정에서 발생하는 버그의 가시성을 높여줍니다. 이 기능이 미치는 영향을 평가하려면, 이 설정을 활성화하여 앱을 테스트해야 합니다. 이 설정은 Settings > Accessibility 아래에 있습니다.

플랫폼 라이브러리에 연결되는 NDK 앱

비공개 API가 로드되는 것을 막기 위해 Android N에는 네임스페이스 변경이 포함되어 있습니다. NDK를 사용하는 경우에는, Android 플랫폼에서 공개 API를 사용해야만 합니다. 차기 Android 공식 릴리스에서 비공개 API를 사용하면 앱 작동이 중단될 수 있습니다.

비공개 API의 사용을 경고하기 위해, Android N 기기에서 실행 중인 앱은 어떤 앱이 비공개 API를 호출하면 logcat 출력에 오류를 생성합니다. 또한 이러한 상황을 인식할 수 있도록 이 오류가 메시지로 기기 화면에 표시됩니다. 그러면 앱 코드를 검토하여 비공개 플랫폼 API의 사용을 제거해야 하며 프리뷰 기기 또는 에뮬레이터를 사용하여 앱을 철저히 테스트해야 합니다.

앱이 플랫폼 라이브러리에 종속된 경우, 개인 API를 동등한 공개 API로 교체하기 위한 일반적인 수정사항은 NDK 문서를 참조하세요. 또한 자신도 모르는 사이에 플랫폼 라이브러리에 연결되어 있을 수가 있습니다(특히 앱이 사용하는 라이브러리가 플랫폼의 일부(예: libpng)이지만 NDK의 일부는 아닌 경우). 이 경우에는 연결에 필요한 모든 .so 파일이 APK에 포함되어 있는지 확인하세요.

주의: 일부 타사 라이브러리는 비공개 API에 연결될 수도 있습니다. 앱이 이러한 라이브러리를 사용하는 경우 차기 Android 공식 릴리스에서 실행할 때 앱 작동이 중단될 수 있습니다.

앱은 NDK에 포함되지 않은 고유 라이브러리를 사용하거나 이에 종속되어서는 안 됩니다. 왜냐하면 이 라이브러리는 특정 Android 릴리스에서 다른 릴리스로 변경되거나 제거될 수 있기 때문입니다. OpenSSL에서 BoringSSL로의 전환은 이러한 변경의 한 예입니다. 또한 NDK에 포함되지 않은 플랫폼 라이브러리에는 호환성 요구사항이 없기 때문에 다른 장치에서 호환성 레벨이 다를 수도 있습니다. 구형 기기에 있는 비-NDK 라이브러리에 액세스해야 하는 경우, Android API 레벨에 따라 로드하세요.

이러한 유형의 문제를 진단하는 데 도움을 주기 위해, 여기서는 Android N으로 앱을 작성할 때 발생할 수 있는 Java 및 NDK 오류의 몇 가지 예를 보여줍니다.

Java 오류의 예:

java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libcutils.so"
    is not accessible for the namespace "classloader-namespace"

NDK 오류의 예:

dlopen failed: cannot locate symbol "__system_property_get" referenced by ...

다음은 이러한 유형의 오류가 발생한 앱의 몇 가지 일반적인 수정사항입니다.

Android for Work

Android N에는 Android for Work를 대상으로 하는 앱에 대한 변경이 포함됩니다. 이러한 변경으로는 인증서 설치, 암호 재설정, 보조 사용자 관리, 기기 식별자 액세스 등에 대한 변경이 있습니다. Android for Work 환경용 앱을 작성하는 경우에는 이러한 변경을 검토하고 그에 따라 앱을 수정해야 합니다.

Android N에서 Android for Work의 변경에 대한 자세한 내용은, Android for Work 업데이트를 참조하세요.

기타 중요한 사항