본문 바로가기

안드로이드

안드로이드 버전별 변경점

1. 안드로이드 9.0(파이) 변경점


   (1) adaptive battery : 기계 학습을 사용하여 사용자가 가장 염려하는 앱의 시스템 리소스에 우선 순위를 매긴다. 


    애플리케이션이 Doze, 앱 대기상태 및 백그라운드 제한 사항에 맞게 최적화 되어 있으면 적응형 배터리를 즉시 사용할 수 있다.  


   (2) 디스플레이 컷아웃 지원(노치 디자인) : 개발자옵션에서 컷아웃 시뮬레이션 기능도 있다.


   (3) 알림 및 스마트 답장(Notifications and smart reply) : 알림(Notification)을 좀더 유용하고 활용할 수 있도록 만들었다. 메시지 앱에서 새로운 MessagingStyle API의 장점을 활용하여 대화를 나타낼수 있고, 사진이나 스티커를 첨부할 수 있습니다. 십지어 스마트 답장(Smart reply)을 제안하기도 한다.아직은 아니지만 곧 MLkit를 이용하여 스마트 답장 기능을 이용하실 수 있다. 


   (4) Slices : 외부에서 참여를 유도하여 사용자들의 작업을 빠르게 수행하는데 도움을 준다. 이 작업은 구글 검색 앱 내에서나 나중에 Google Assistant와 같은 다른 장소에서 앱의 풍부하고 동적인 대화형 콘텐츠를 표시 할 수 있는 UI템플릿을 나타낸다. 


   (5) 통화 로그 액세스 제한 :  CALL_LOG 권한 그룹을 도입하고 READ_CALL_LOG, WRITE_CALL_LOG 및 PROCESS_OUTGOING_CALLS 권한을 이 그룹으로 이동한다. 이전의 Android 버전에서 이 권한들은 PHONE 권한 그룹에 위치했다.

이 CALL_LOG 권한 그룹은 사용자가 앱에서 전화 통화 기록을 보고 전화번호를 식별하는 등과 같이 전화 통화와 관련된 민감한 정보에 액세스하는 데 필요한 강화된 제어 능력과 가시성을 제공한다.앱에서 통화 로그에 액세스해야 하거나 발신 통화를 처리해야 할 경우 CALL_LOG 권한 그룹으로부터 명시적으로 이 권한을 요청해야 한다. 그렇지 않으면 SecurityException이 발생한다.


    (6) 전화번호 액세스 제한 : READ_CALL_LOG 권한을 얻어야 전화번호 또는 전화 상태를 읽을 수 있습니다.

수신 및 발신 통화와 관련된 전화번호는 수신 전화 및 발신 전화 등에 대한 전화 상태 브로드캐스트 에서 확인할 수 있고 PhoneStateListener 클래스에서 액세스할 수 있습니다. 그러나 READ_CALL_LOG 권한이 없으면 PHONE_STATE_CHANGED 브로드캐스트와 PhoneStateListener를 통해 제공되는 전화번호 필드가 비어 있습니다.

전화 상태에서 전화번호를 읽으려면 사용 사례에 따라 필요한 권한을 요청하도록 앱을 업데이트하십시오.


2. 안드로이드 8.0(오레오) 변경점


  (1) 알림채널  : 하나 이상의 알림채널을 가져야 한다. 개별 알림에 대한 중요도는 폐지되고 채널 단위로 중요도를 설정할 수 있다. 


   채널에 대해서 사용자는 중요도, 소리, 빛, 진동, 락스크린에 표시 여부, 방해 금지 등을 설정할 수 있다. 


  (2) 픽쳐 앤 픽쳐 : 화면 위에 작은 영상 재생 창을 열어 놓을 수 있는 기능이다. 다른 앱을 실행해도 영상 재생 창은 항상 화면 제일 위에 고정된 상태로


   남아 있다.


  (3) 폰트 :이제 폰트를 리소스에 추가하고 레이아웃에 적용하는 것이 가능해진다. 


<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android">
    <font
        android:fontStyle="normal"
        android:fontWeight="400"
        android:font="@font/lobster_regular" />
    <font
        android:fontStyle="italic"
        android:fontWeight="400"
        android:font="@font/lobster_italic" />
</font-family>

폰트를 만들고 나서 다음과 같이 적용하면 된다.


<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:fontFamily="@font/lobster"/>

 (4) 적응형 아이콘

   - 원형의 아이콘이 적합한 상황에서는 원형의 아이콘을 표시하고 그렇지 않은 단말에서는 사각형의 아이콘을 출력할 수 있습니다.


<application
    // …
    android:icon="@mipmap/ic_launcher"
    android:roundIcon="@mipmap/ic_launcher_round"
    // …
>
</application>


<adaptive-icon>
    <background android:drawable="@color/ic_background"/>
    <foreground android:drawable="@mipmap/ic_foreground"/>
</adaptive-icon>

 (5) 백그라운드 실행 및 위치 제한 

    

    1) 백그라운드 서비스 제한 : 앱이 유휴상태일때 백그라운드 서비스 사용 제한 ex) startService 에러 -> startForegroundService해야됨


     (5초이내에 startForeground실행)


    2) 브로드 캐스트 제한 : 매니페스트에 암시적 브로드 캐스트를 등록 할 수 없다. 런타임에 브로드캐스트 수신기에 등록해라. 


    3) 백그라운드 위치 제한 : 백그라운드에서 사용자의 현재 위치를 검색할 수 있는 빈도를 제한합니다.



3. 안드로이드 7.0(누겟) 변경사항



(1) 멀티 윈도우 지원(android : resizeableActivity="false")


(2) 설정 - 디스플레이 사이즈 변경


(3) 확장 Doze모드 : 움직이고 있으나 사용자가 폰을 15분간 사용하지 않으면 확장 도즈모드에 빠집니다. 제한사항으로는 네트워크에 액세스가 


    불가능해지고 백그라운드 서비스가 뒤로 밀립니다. 


(4) 백그라운드 최적화 : 백그라운드중에 new_picture, new_video 사용할 수 없습니다. 


    - connectivity_change를 매니페스트에 등록할 수 없다. 런타임중에 리시버 등록해야 사용이 가능합니다. 


     해결방법은 jobscheduler, Firebase jobdispatcher를 사용한다. 



4. 안드로이드 6.0(마시멜로우) 변경사항


 (1) 런타임 권한


 (2) URI 권한 : contentprovider는 읽기&쓰기 권한을 사용해 자체보호를 해야한다. Intent.FLAG_GRANT_READ_URI_PERMISSION, 


                    Intent.FLAG_GRANT_WRITE_URI_PERMISSION, android:grantUripermission지정 -> 사진촬영,Crop


 (3) Doze 모드 : 플러그를 뽑고 화면이 꺼진채 일정시간이 지나면 Doze에 빠진다. 


      제한사항 1) 네트워크액세스 제한 2) wakelocks 무시 3) wifi 스캔 수행 x 4) jobschduler 실행무시 


 (4) app standby 모드 : 사용자가 일정시간 앱을 터치하지 않고 포그라운드에 있는 구성요소가 없을때 app standby모드에 빠진다. 


     제한사항 1) 네트워크 액세스 제한 2) jobscheduler 허용되지 않습니다. 


 (5) apache http 클라이언트 제거됨 -> httpUrlConnection 사용



5. 안드로이드 5.0(롤리팝) 변경사항

(1) 안드로이드 런타임(ART) : 달빅대신 적용되었고 달빅의 JIT컴파일러에서 AOT(Ahead-Of-Compiler) 컴파일러가 적용되었다. 


    JIT컴파일러(just in time) : 실행시점에 소스코드를 번역한다. 설치가 빠르지만 실행시점이 느리다. 


    AOT컴파일러(Ahead of time) : 설치시점에 소스코드를 번역한다. 설치가 느리지만 실행이 빠르다. 


(2) 머티리얼 디자인 적용 : 색상과 구성을 통해 직관적인 인식이 가능하고 그림자 효과를 이용해 입체감을 살리는 디자인 기법으로 


    동일한 UI/UX 제공이 목표이다. 



(3) Notification 기능 변경 및 발전 : 잠금화면 알림표시의 공개 수준 제어 (VISIBILITY_PRIVATE ~SECRET)


    Notification.Builder로 생성한다. 이전생성법은 deprecated


(4) 프로젝트 볼타  - 배터리 절약


   1) 배터리 히스토리안 적용 : 배터리 소모내역을추적하고 시각화해주는 툴 


      지나치게 wakelock실행( 매10초마다), gps장치 계속 실행, 30초마다 작업 예약


   2) jobscheduler 도입


     - 특정조건에서 비동기적으로 시스템을 실행하는 작업을 정의하여 배터리 수명을 최적화 하는 API


        1) 충전중일때 2) 무제한 네트워크 연결 3) 유휴상태 ~