본문 바로가기

Android/Android Version

[Android] Android11에서의 변경 점

728x90

현재 Android13 Preview가 나온 상황에서, 앞의 버전에서 변경된 부분을 다시 체크하고 넘어가고자 한다.

보안에 관련된 것들이 계속해서 추가됨에 따라 프로젝트를 유지보수할 때 버전에 따른 처리에 대해 고려해야하는 점이 늘어나고 있는 것 같다.

따라서, Android11에서 부터 변경된 부분 중 필자가 가장 영향이 큰 부분이라고 생각하는 부분에 대하여 간략하게 정리해보고자 한다.


우선, 필자가 영향이 가장 크다고 생각하는 부분은

Android Developers에서 나와있는 Privacy에 관련된 부분이라고 생각한다.

 

출처 :https://developer.android.com/about/versions/11/behavior-changes-11?hl=ko#change-details_3

 

위에 해당하는 변경 사항을 간략하게 살펴보도록 하자.

 

범위 지정 저장소 적용

이는 Android10에서 나온 Scoped Storage에 대한 내용을 좀 더 보완하여 나온 부분이다.

 

  • Android11을 타게팅 하게 되면 requestLagacExternalStorage 플래그 값을 완전히 무시한다.
  • 외부 저장소에 앱별 자체 디렉토리를 생성할 수 없다.
  • 시스템에서 앱에 제공하는 디렉토리에 접근하기 위해서는 getExternalFilesDirs()를 사용한다.
  • 외부 저장소 내 다른 모든 앱의 전용 앱별 디렉토리 파일에 접근할 수 없다.
  • ACTION_OPEM_DOCUMENT_TREE를 사용하여 내부 저장소의 루트 디렉토리, Download 디렉토리에 접근할 수 없다.
  • WRITE_EXTERNAL_STORAGE, WRITE_MEDIA_STORAGE 권한은 추가 액세스를 지원하지 않는다.

이것들 외에도 다양한 부분이 변경 되었지만, Android10에서 변경된 부분 중 중 자주 쓰이는 부분에 대해서 작성해 두었다.

전반적으로 디렉토리에 대한 접근 권한이 줄어들었고, 해당 앱 내에서 제공되는 디렉토리만 사용가능하게 변경이 된 것으로 보인다.

 

권한 자동 초기화

말 그대로 사용자가 일정 기간동안 앱을 사용하지 않았다면, 앱의 권한을 시스템이 자동적으로 초기화 시켜준다.

해당 변경 사항은 별도로 코드를 작성하여 적용할 필요 없이 시스템에서 알아서 적용해주는 부분이다.

여기서 시스템이 자동적으로 초기화 시켜준다는 부분은, 앱의 권한 수준을 거부로 변경하는 것과 동일한 효과를 나타낸다.

 

일회성 권한

갑자기 왠 일회성 권한인가 싶을 것이다.

권한 자동 초기화에 대한 내용을 확인하던 와중, 일회성 권한이라는 부분도 해당 카테고리에서 추가되어 기입되어있는 것을 보았다.

일회성 권한이란 위치, 마이크, 카메라와 관련된 권한에서 추가된 부분이다.

android9 이하라면 허용과 거절.

android10 라면 항상 허용, 앱 사용중일 때만 허용, 거절

로 구분이 되었는데, 여기서 항상 허용이 사라지고 이번에만 허용이 추가 된 것이다.

 

 

이처럼 말이다.

위치 권한을 받을 때 앱 사용중일 때만 허용(포그라운드 상태), 한번만 허용, 거절로 권한 설정을 할 수 있게 된다.

 

위치, 마이크, 카메라에만 해당 권한이 들어간 것으로 보아,

개인 정보에 민감한 권한들이기 때문에 보안을 높이기 위해 항상 허용을 없애고 이와 같은 권한을 추가한 것이 아닌가 생각한다.

 

 

백그라운드 위치 액세스

이전 버전까지의 위치 권한은 백그라운드에서의 위치 권한까지도 받을 수 있었다.

Android10에서의 앱 사용중일 때만 허용은 포그라운드 상태에서만이지만, 항상 허용이 있었기 때문에 백그라운드에서도 접근이 가능했다.

 

하지만, Android11 부터는 백그라운드 위치 권한을 받기 위해서는 사용자가 직접 설정을 해주어야 한다.

직접 설정이라 함은, 앱 실행시에 나오는 권한 체크를 통해 설정하는 것이 아니라 앱의 설정페이지에 들어가서 직접 권한을 수락해주는 작업이 필요하단 것이다.

 

 

백그라운드에서 위치 엑세스를 설정하기 위해서는

ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION 권한이 필요하며,

Android10 이상을 타겟팅한다면 ACCESS_BACKGROUND_LOCATION 권한도 확인을 해주어야 한다.

 

백그라운드에서 위치 엑세스 자체는 Android8 이후로 빈도수를 제한하고 있으며,

백그라운드에서의 위치 정보 엑세스가 핵심 기능에 필요한지, 필요하다면 사용자에게 명확하게 엑세스하고 있음을 표시한다던지 등 민감한 데이터임을 인지하고 사용하라는 뉘앙스의 설명 글을 볼 수 있다.

이번에도 보안쪽으로 신경을 썼으니 반드시 필요하지 않으면 왠만하면 사용하지 말아라. 라는 것 같다.

 

패키지 공개 상태

Android11이상을 타겟팅할 경우, 디바이스에 설치 된 다른 앱 목록을 알 수 없다.

따라서, 특정 패키지 설치 여부를 확인할 필요가 있는 경우에는 매니페스트에 권한을 설정해주어야 한다.

 

QUERY_ALL_PACKAGES를 사용하여 Android10 이하를 타게팅하는 앱 처럼 모든 패키지에 대한 정보를 가져올 수 있으나, 이는 Google Play 정책에 의해 사용이 제한될 수 있다고 한다.

 

따라서, 다른 앱의 정보를 가져와야하는 경우에는

<queries> Tag를 사용하여 다른 앱의 패키지 이름이나 Intent 를 정의하여 사용해야 한다.

 

<queries>
    <package android:name="com.example.sample"/>
</queries>

 

 

이처럼 패키지 이름을 직접 선언하여 사용하면, 해당 패키지에 대한 앱 정보를 가져올 수 있게 된다.

 


필자가 생각했을 때, Android11으로 타겟을 변경했을 때 가장 영향이 있을 법한 내용만 작성해 보았다.

 

다양한 부분에서 변경된 점이 많기 때문에 제대로 Android11을 타겟하기 위해서는 관련된 문서와 자료들을 확인해봐야 할 것 같지만, 가장 변경점이 많다고 생각되는 Privacy관련된 부분이라도 제대로 알고 있으면 그나마 Android11을 타겟으로 설정하는 것에 무리가 없지 않을까 싶다.

 

저장 공간에 관련해서는 Android10에서 나온 Scoped Storage를 기반으로 개선된 부분이 많기 때문에 해당 부분에 대해 알기 위해서는 Android11 문서보다 Android10 문서를 확인하는 것이 좋을 것으로 보인다.

 

전반적으로 Android 버전을 올릴수록 개인정보와 보안성에 까다로워 지는 것으로 보인다.

보안에 관련된 것들이 하나씩 추가되고 있어 버전에 따른 추가적인 작업도 해주어야 한다는 것이 까다롭게 느껴진다.

 

이미 Android13에 대한 프리뷰가 나왔지만 아직 확인해보진 않았는데, 최신 버전을 확인하기 앞서 Android12에 대한 내용도 한번 더 숙지하고 넘어가야 할것으로 보인다.

 

해당 게시글을 작성하기 위해서 참고한 Developer 문서를 링크로 추가해두도록 하겠다.

https://developer.android.com/about/versions/11/behavior-changes-11?hl=ko 

 

동작 변경사항: Android 11을 타겟팅하는 앱  |  Android 개발자  |  Android Developers

모든 앱에 영향을 주는 Android 11의 변경사항을 알아봅니다.

developer.android.com

 

728x90