본문 바로가기

개발/Android 개발 주저리

개발자를 위한 안드로이드 5.0 롤리팝의 중요 변경사항은?

<안드로이드의 V 사인은 남은 2주간을 나타낸다는 설이 있습니다.>


이번 안드로이드 롤리팝은 추가된 API 의 숫자만도 5,000 개가 될 만큼 기존 버전에 비해 정말 다양한 변화가 있었는데요, 그 변화의 폭도 넓어서 새로운 사용자 UX 인 머티리얼 디자인 부터 새로운 런타임 ART 까지, 플랫폼 가장 위에서 아래까지 많은 변화가 있었습니다. 그런만큼 혹시라도 여러분의 앱이 새로운 안드로이드 5.0 플랫폼 버전에서 별다른 문제 없이 잘 동작하고 있는지, 안드로이드 5.0을 지원하는 디바이스가 정식 출시 될 때까지, 남은 2주간의 시간을 잘 활용해서 다음과 같은 부분을 꼭 한번 확인해보시기 바랍니다.


아래 정리한 내용은 안드로이드 개발자의 영원한 동반자. 안드로이드 개발자 사이트의 API 21 소개 페이지의 내용을 기반으로 정리하였습니다.


안드로이드 런타임(ART)이 기본 런타임으로 사용됩니다.

안드로이드 4.4 킷캣 버전부터 새로운 안드로이드 런타임 ART 가 추가되었습니다. 4.4 까지 ART 는 개발자 옵션을 통해서만 기능을 사용할 수 있었지만, 안드로이드 5.0 부터는 ART 가 기본 런타임으로 사용됩니다. ART는 Ahead-of-time(AOT) 컴파일, 개선된 가비지 컬렉션(GC), 개선된 디버깅 기능등을 지원합니다. 보다 자세한 내용은 ART 소개 페이지를 참고하시기 바랍니다. 


대부분의 안드로이드 앱은 별다른 변경 없이 ART상에서 잘 동작합니다. 그러나 기존 Dalvik 과 동작 방식에 몇 가지 차이가 있기 때문에, 특히 다음과 경우에는 앱의 ART 호환성 여부를 꼭 확인해봐야 합니다. 


  • C / C++ 코드를 실행하기 위해 Java 네이티브 인터페이스 (JNI)를 사용합니다. 
  • 서드파티 난독화 도구등 비표준 코드를 생성하는 개발 도구를 사용하고 있습니다. 
  • 가비지 콜렉션 컴팩트 기능이 동작하면 호환되지 않는 기술을 사용하고 있습니다. (ART 현재 GC 컴팩트 기능을 사용하지 않지만, 안드로이드 오픈 소스 프로젝트 상에서 해당 기술을 개발 중입니다.)


이외 ART 호환성 이슈가 발생하는 경우는 개발자 사이트의 ART 호환성 검증에 관한 문서를 확인해보시기 바랍니다.


알림(Notification) 기능이 크게 변경발전 되었습니다.

앱에서 알림 기능을 사용하고 계시다면,  안드로이듸 5.0 의 새로운 알림 기능과 잘 조화를 이루는지 확인할 필요가 있습니다. 특히 안드로이드 5.0 알림 디자인에 관한 자세한 내용은 디자인 가이드문서를 확인해 보시기 바랍니다.



머티리얼 디자인 스타일의 알림

알림은 새로운 머티리얼 디자인 위젯에 맞게 흰색(혹은 아주 가벼운) 배경에 어두운 텍스트로 표시되도록 다시 한번 변경되었습니다. 사용중인 알림이 새로운 배경색에 잘 어울리는지 확인하고 이상한 점이 있으면 잘 어울리도록 멋지게 수정해주시기 바랍니다 : )


  • setColor() 메서드를 이용해 아이콘 이미지 뒤에 원 안에 악센트 색상을 설정할 수 있습니다.
  • 알림에 사용되는 이미지들에 색상이 입혀 있다면 이를 수정해야 합니다. 여러분의 알림에서 사용된 리소스의 색상 정보는 시스템에 의해 무시되며 오직 알파 채널 값만이 사용됩니다. 실제 아이콘의 색상과는 무관하게 알림 아이콘은 흰색, 액션 아이콘은 짙은 회색으로 그려집니다.


소리와 진동

만일 여러분이 Ringtone, MediaPlayer, Vibrartor 클래스를 이용해 알림의 소리나 진동을 구현하고 있다면, 시스템이 새로운 '우선 순위 모드(priority mode)' 에 있을 때, 이를 적절히 처리할 수 있도록 해당 코드는 제거해주시기 바랍니다. 대신 Notification.Builder 를 이용해 사운드나 진동을 추가할 수 있습니다. 


디바이스를 RINGER_MODE_SILENT 모드로 설정하면, 디바이스가 새로운 우선 순위 모드로 변경됩니다. 디바이스는 음소거 모드를 벗어날때 까지 우선 순위 모드로 유지됩니다.


지금까지 안드로이드 테블릿 장치의 마스터 볼륨을 제어하기 위해서는 STREAM_MUSIC 이 사용되었습니다. 안드로이드 5.0 부터는 스마트폰과 태블릿 모두 STREAM_RING 혹은 STREAM_NOTIFICATION 에 의해 마스터 볼륨이 제어됩니다.


잠금 화면(Lock Screen)

안드로이드 5.0에서 기본적으로 모든 알림은 잠금 화면에 표시됩니다. 잠금 화면에 민감한 정보가 표시되지 않도록,사용자는 민감한 정보가 표시되지 않도록 설정할 수 있습니다. 이렇게 되면 알림 내용이 표시될 때 텍스트 내용이 자동으로 제거됩니다. 개발자 여러분이 편집된 알림의 내용을 직접 정의하려면 setPublicVersion() 메서드를 사용할 수 있습니다.


만일 알림에 개인 정보가 포함되어 있지 않거나, 알림을 통해 미디어를 제어할 수 있게 하려면 setVisibility() 메서드를 호출해 알림을 VISIBILITY_PUBLIC 으로 설정합니다.


미디어 재생

기존의 커스텀 RemoteView 를 사용하는 대신, 새로운 Notification.MediaStyle 을 이용해 사용자에게 미디어 재생 컨트롤 기능을 제공할 수 있습니다. 어떤 방법을 사용하던 알림의 Visibility 를 VISIBILITY_PUBLIC 으로 설정하면 사용자는 잠금화면에서 바로 미디어를 컨트롤 할 수 있습니다. 안드로이드 5.0 부터는 더이상 잠금 화면에 RemoteControlClient 객체를 표시하지 않습니다. 바로 아래에 이와 관련된 보다 자세한 내용을 확인하실 수 있습니다.


헤드 업(Heads-up) 알림


새로운 해드 업 알림 기능이 추가되었습니다. 디바이스가 활성화된 상태일 때 화면에 떠있는 형태로 표시되는 작은 창 모양의 알림으로 사용자가 바로 실행할 수 있는 액션버튼을 포함할 수 있습니다. 사용자는 현재 실행 중인 어플리케이션을 벗어나지 않고도 바로 헤드 업 알림 내용을 확인하고 특정 액션을 실행하거나 알림을 닫을 수 있습니다.


헤드 업 알림은 다음과 같은 경우에 발생할 수 있습니다.


- 알림이 fullScreenIntent를 갖고 있으며, 전체 화면을 필요로 할 때

- 알림의 우선 순위가 높으며 벨소리 및 진동을 사용하고 있을 때


여러분이 어플리케이션이 해당 조건을 만족하는 알림을 사용하고 있다면, 헤드 업 알림이 제대로 표시되는지 확인하시기 바랍니다. 


RemoteControlClient 가 더이상 지원되지 않습니다.

안드로이드 5.0 에서는 RemoteControlClient 를 사용해도 미디어 재생 컨트롤 화면이 잠금 화면에 표시되지 않습니다. 대신, 새로운 Notification.MediaStyle 탬플릿을 통해 미디어 재생 컨트롤을 잠금 화면에 표시할 수 있습니다. 


Notification.Builder.addAction() 메서드를 통해 추가한 액션은 미디어 재생 알림에 버튼 형태로 추가되며 setSession() 메서드를 통해 현재 어떤 미디어 세션이 재생되고 있는지 지정할 수 있습니다. 새로운 MediaStyle 스타일 알림을 사용할 때는 사용자가 잠금 화며에서 미디어를 컨트롤 할 수 있도록 VISIBILITY_PUBLIC 속성을 사용하시기 바랍니다.


안드로이드 TV 나 안드로이드 웨어 디바이스에서도 미디어 재생 기능을 지원하기 위해서는 MediaSession 클래스를 구현해야 합니다. 또한, 안드로이드 디바이스에서 미디어 버튼 이벤트를 받아 특정 작업을 수행하려고 하는 경우에도 마찬가지로 MediaSession 클래스를 구현 하셔야 합니다.


getRecentTasks() 는 더 이상 지원되지 않습니다.

안드로이드 5.0 에서는 하나의 앱을 여러 개의 다큐먼트와 엑티비티 태스크로 분리하여 지정하고 관리할 수 있는 방법이 추가되면서, 사용자의 개인정보를 보호하기 위하여 ActivityManager.getRecentTasks() 메서드는 더 이상 지원되지 않습니다. 하위 호환을 위하여 안드로이드 5.0 에서 이 메서드는 메서드를 호출한 프로그램과 홈과 같은 덜 민감한 태스크의 정보만을 반환하도록 수정되었습니다. 만일 현재 여러분의 앱에 속한 태스크의 정보를 확인하고자 한다면, 새로운 getAppTasks() 메서드를 사용하실 수 있습니다.


64비트가 지원됩니다. 최신 NDK를 이용해 앱을 다시 빌드해야 합니다.

안드로이드 5.0은 64비트 시스템을 지원합니다. 64비트로 주소 공간이 늘어나며 성능이 향상 될 수 있습니다. 또한 64비트 지원을 통해 OpenSSL의 암호화 성능도 개선될 수 있습니다. 여기에 이번 릴리즈에서는 새로운 네이티브 NDK API 와 OpenGL ES 3.1이 추가적으로 지원됩니다.


안드로이드 5.0에서 지원되는 64비트 지원을 활용하려면 NDK 페이지에서 최신 NDK 10c 버전을 다운로드 받아 설치해 보시기 바랍니다. 릴리즈 노트를 참고하시면 NDK 의 주요 변경 및 버그 수정에 관한 내용을 확인하실 수 있습니다.


Context.bindService() 는 명시적 인텐트만을 지원합니다.

안드로이드 5.0 부터 서비스에 바인드 하기 위해서는 반드시 명시적 인텐트를 사용해야 합니다. 만일 암시적 인텐트를 이용해 bindService() 를 호출하는 경우 예외가 발생합니다. 여러분의 앱이 보안을 위하여 서비스에 바인드 할 때는 반드시 명시적 인텐트를 사용하고 서비스를 위한 인텐트 필터는 사용하지 않는 것이 권장됩니다.



그외 달라지거나 추가된 API를 보시려면 아래 링크를 참조하시면됩니다

https://developer.android.com/about/versions/android-5.0.html



< Android 5.0 API 21 SDK 다운로드 가능! >




출처: Google Developers Korea Blog 어드보케 양찬석님





  • 비밀댓글입니다

  • 신입개발자 2015.07.21 08:20 댓글주소 수정/삭제 댓글쓰기

    구글맵 프레그먼트 사용시 getfragment()로 가져오던걸 getchildfragment를 써야하는걸로 바뀌었네요

    • 네 그부분도 바뀌었는데, 해당 부분은 Google Play Service SDK의 변경사항이여서 OS 플랫폼단 추가/변경 내역에는 포함되지 않기때문에 명시하지 않아요~

      Play Service도 이번 7.5 업데이트부터는 상당히 많은 부분이 바뀌었더라구요
      라이브러리 크기자체가 너무 방대해져서 65k limit 오류때문에 짜증나긴 하지만요..