구글 I/O 2017, Android 새로운 기능 정리

구글 I/O 2017 안드로이드 키노트 정리를 해보겠습니다. 안드로이드 O부분도 있지만, 지금 바로 사용가능한 서포트 라이브러리에 대한 소식도 많습니다.

2017-05-18 오전 10.52.39

16비트 PNG파일을 지원합니다. 새로운 유틸 클래스를 이용하면 16비트의 PNG파일을 사용 할 수 있습니다.

2017-05-18 오전 10.53.15
24비트 vs 16비트

핵심적인 컬러값만을 사용하여, 복잡하지 않은 이미지에 사용한다면 용량과 성능을 높일 수 있습니다.

2017-05-18 오전 10.53.38

멀티 윈도우를 지원하는 앱이라면, 멀티 디스플레이도 지원할 수 있습니다. 앱이 실행될때 사용자는 임의로 제어가능하며, 앱에서도 ActivityOptions를 통해 제어할 수 있습니다.

2017-05-18 오전 10.54.08

멀티 디스플레이 테스트는 adb shell 명령을 통해 멀티 디스플레이를 사용할 액티비티를 실행 할 수 있습니다.

2017-05-18 오전 10.54.51

미디어 매트릭스 API를 지원합니다. 이를 통해 미디어에 대한 정보(해상도, 프레임등)를 간단하게 얻어 올 수 있습니다.

2017-05-18 오전 10.55.11

MediaPlayer에서 버퍼링을 제어 할 수 있도록 개선되었습니다. 또한 훨신 쉽게 DRM Playback을 지원합니다.

2017-05-18 오전 10.56.08

MPEG-2 TS 포맷 지원도 합니다.

2017-05-18 오전 10.56.23

크롬 브라우저에서 지원하는 안전하지 않는 웹 페이지의 기능을 웹뷰에서도 사용가능합니다. 안드로이드 매니페스트에 메타 태그를 간단히 추가만하면 됩니다. 또한 멀티 프로세스를 위한 새로운 API도 추가되었습니다.

2017-05-18 오전 10.57.49

setCurrentPlayTime()을 통해 애니메이션할 시간을 임의로 지정 가능합니다. 이는 자유자재로 애니메이션 플레이를 제어 할 수 있습니다. 또한 reverse()를 통해 반대로 애니메이션 할수 있도록 지원합니다.

2017-05-18 오전 10.58.31

사용자 정보를 자동으로 채울 수 있는 자동완성 기능도 추가 되었습니다.

2017-05-18 오전 11.00.23

글꼴 리소스를 공식 지원합니다.

2017-05-18 오전 11.00.52

글꼴을 앱에 탑제하지 않고 구글 플레이 서비스의 폰트 프로바이더를 통해서도 사용가능합니다.

2017-05-18 오전 11.01.39

텍스트뷰의 텍스트를 자동으로 사이즈 변경기능을 지원합니다. 텍스트의 크기를 자동으로 뷰 사이즈 크기에 맞게끔 변경해줍니다. 이 모든것은 서포트 라이브러리를 통해 사용가능합니다.

2017-05-18 오전 11.02.55

접근성 서비스의 경우 언어 감지, 볼륨 컨트롤 사용자 정의, 제스쳐 사용자 정의를 지원합니다.

2017-05-18 오전 11.03.41

findViewById는 이제 자동 캐스팅을 지원합니다. 하지만 이를 대처할만한 라이브러리가 많고 하위 안드로이드 O에서만 지원하기 때문에 그렇게 유용하지는 않을듯 합니다.

2017-05-18 오전 11.04.51

반응형 아이콘을 만들수 있습니다. 아이콘은 배경과 전경으로 이루어지며, 런처는 마스크를 통해 아이콘 모양을 직접 디자인 할 수 있습니다.

2017-05-18 오전 11.06.00

바로 가기또는 위젯 생성을 위한 새로운 Action이 추가 되었습니다. 런처의 위젯 추가가 아닌 앱에서 바로 위젯을 추가 요청을 할 수 있습니다.

2017-05-18 오전 11.06.14

ShortCutManager, AppWidgetManager를 통해 바로가기, 위젯 추가 요청을 하면 Manager의 다이얼로그가 나타납니다. 이를 통해 위젯의 사용성을 향상 할 수 있습니다.

2017-05-18 오전 11.06.55

수 많은 알림은 사용자가 원하는 정보를 얻기에는 매우 어렵습니다. 또한 사용자가 임의로 제어기도 힘듭니다.

2017-05-18 오전 11.07.22

이런 문제점으로 안드로이드 젤리빈에서는 알림을 블락처리하는 기능을 추가 했었으며, 안드로이드 누가에서는 무음으로 처리하는 기능이 추가 되었습니다.

2017-05-18 오전 11.07.43

하지만 여기에도 앱내에서 기능별로 알림을 제어 할 수 없다는 문제점이 있습니다. 안드로이드 O에서는 동일한 동작을 하는 알림을 채널별로 나누어 사용자가 컨트롤 할 수 있는 기능을 추가 하였습니다.

2017-05-18 오전 11.10.13

Strict Mode에 Unbuffer I/O와 sockets, URI를 감시하는 기능이 추가 되었습니다.

2017-05-18 오전 11.14.52

구글 플레이는 설치된 모든 앱에 대해 검증된 앱인지를 판별 해주는 “구글 플레이 프로텍트”기능이 추가 되었습니다. 플레이 스토어뿐만 아니라 직접설치, 다른 스토어에서 설치된 앱도 잠재적인 위험이 있는지에 대해 스캐닝 해줍니다.

2017-05-18 오전 11.20.35

새로운 복사 수집기능이 추가 되었으며, 최적화된 힙 관리기술도 추가 되었습니다.

2017-05-18 오전 11.23.28

물리학 기반의 애니메이션 시스템을 통해 개발자는 복잡한 수학 계산필요 없이 단순히 자연어를 통해 물리학 기반의 애니메이션을 구현 할 수 있습니다.

이 외에도 Activity 라이프사이클을 좀 더 단순화하였으며, 배터리 최적화를 위해 백그라운드 처리에 대한 좀 더 타이트한 기술등 소개되었습니다.

구글 I/O Extended Seoul에서 발표한 Android N

구글 IO때 예상된 일정에는 차질 없다. 빠른 시일내에 N테스트를 해야한다.


스크린 줌 설정

런타임시 화면 밀도가 바뀔 수 있으니 테스트해봐야 한다. Bitmap을 캐쉬해두는 경우 문제가 될수 있다. 고사양 기기가 sw320dp를 가질 수도 있으니 염두해둔다.


멀티스크린

가로/세로 모드를 반드시 구현해라.
멀티스크린 모드로 인해 화면이 작아 질수 있으니 최소 220dp(w/h)가 지원되도록 개발해야한다.
사용자가 화면크기를 늘리거나 줄일떄 기본으로 Activity가 재 생성되며, 필요에 따라 onConfigurationCahaged() 이벤트로 처리 할 수 있다.
attr#resizedableActivity값은 기본적으로 TRUE이며 필요에 따라 속성을 변경 하면된다. 단, Root Activity의 FLAG의 속성에 따라 작동 유무가 판단된다.

targetSdk 24를 쓰면서 멀티스트린 지원하지 않게 하는 팁!
* targetSdk = 24
* resizedableActivity = false
* launchMode = singleInstance | singleTask

앱간의 Drag and Drop API도 있으니 필요시에 사용가능하다.


배터리 최적화 모드(Doze)

Doze on the Go (light Doze모드) 새기능 추가
움직임이 있더라도 사용자가 폰을 일정시간 사용하지 않으면 doze모드 진입
네트워크 작업 중단, 잡스케줄러 지연
이미 Doze모드에 최적화된 앱은 별도로 신경 쓸 필요는 없다.

테스트

#adb shell dumpsys deviceidle step light

Doze모드 whitelist에 추가 하는 API도 있는데 잘못 하용하면 앱이 내려갈 수 있다.

참고: 안드로이드 앱 배터리 최적화 무시방법


메모리 최적화 모드

Broadcast 이벤트를 처리시 많은 앱에서 동시에 처리 하는경우 문제가 된다. 동시에 수많은 앱에서 이벤트를 처리 하기때문에 성능적으로 문제가 되며, 특히 사용하고 있지 않는 앱도 이벤트를 받는등 불필요한 작업이 있을 수 있다.

런타임시에 등록한 경우는 작동되나 안드로이드 메니페스트에서 선언한 Broadcast의 경우 작동하지 않는다.
CONNECTIVITY_CHANGE, NEW_PICTURE, NEW_VIDEO는 메니페스트에서 선언한 Broadcast의 경우 N부터 작동하지 않는다.

테스트

#adb shell cmd appops set <package-name> RUN_IN_BACKGROUND igenore