안드로이드/SDK version

Android 11 분석

코딩하는후운 2021. 5. 31. 11:21
반응형

왜 사용자 정보 보호와 관련된 기능 및 변경사항이 매번 새 안드로이드 버전이 출시 될 때마다 추가 되고 되던 기능을 막는건가?
- 개인정보 보호 관점에서 스마트 디바이스가 더욱 중요한 역할을 하고 있기 때문


사용자 정보 보호 원칙
- 최소한의 권한만 요청
- 필요할 때 권한 요청
- 사용자가 권한을 허용하지 않더라도 올바르게 처리

 

 

일회성 권한
-대표적인 변경사항 : 카메라, 마이크, 위치권한 Android 11에 이번만 허용이 추가되었음 (앱이 Foreground일 경우에만 허용)
: 앱이 백그라운드에 진입 하면 시스템 내부에 타이머가 시작됩니다. 그 후 타이머가 만료되면 권한을 사용할 수 없습니다.

 

 

백그라운드 위치 권한
Android 10
: ACCESS_BACKGROUND_LOCATION 권한 필요
: 런타임 권한과 동일한 방식으로 요청
: 백그라운드 위치 접근 확인 알림

Android 11
: ACCESS_BACKGROUND_LOCATION 권한 필요
: 점진적 권한 요청이 필요

점진적 권한 요청?
: 포그라운드 위치 권한(ACCESS_COARSE_LOCATION 혹은 ACCESS_FIND_LOCATION)을 먼저 획득 후,
백그라운드 위치 권한(ACCESS_BACKGROUND_LOCATION)을 요청해야 함.

*포그라운드 위치 권한 없이 백그라운드 위치 권한을 요청할 경우 권한 요청이 자동 거부됨.

 

 

 

점진적 권한요청이 적용되는 방식은 타겟SDK에 따라 다르다
1. 타깃 SDK Android 11이상
포그라운드 위치 권한을 획득한 후에 백그라운드 위치 권한을 요청해야함.
: 백그라운드 위치 권한이 필요한 이유 설명(앱UI) -> 런타 권한요청 다이얼로그가 표시되는 대신, 바로 해당 앱의 위치권한 설정 화면으로 이동한다. -> 사용자가 직접 설정화면에서 항상허용을 해줘야 권한을 얻을 수 있다.
동시에 요청 하면 예외가 발생한다고 한다.

2. 타깃 SDK Android 11미만
포그라운드와 백그라운드 위치권한을 동시에 요청할 수 있다.(호환성 차원에서 지원)
: 위치 권한 설정화면에 이동할 수 있는 런타임 권한 다이얼로그가 나타납니다.

2-1. 포그라운드 권한과 백그라운드 권한 나눠서 할 수 있다.

 

 


권한 자동 재설정
: 앱을 설치 후 몇가지 권한을 부여 후 몇개월 앱을 사용하지 않으면 시스템이 자동으로 권한을 회수한다.
(런타임 권한 회수)

앱에 성격에 따라 권한 자동 재설정 예외가 있을 수 있다.
-사용자 안전에 관한 앱, 백그라운드 동기화 앱, 스마트 디바이스 연동앱 : 사용자가 직접적으로 사용하진 않지만 백그라운드에선 주기적인 작업이 필요할 수 있다.
: 사용자가 명시적으로 앱이 사용되지 않을 경우 권한 삭제 옵션을 끌 수 있도록 안내 할수 있다.
1) ACTION_APPLICATION_DETAILS_SETTINGS 인텐트를 호출해서 앱 정보 화면까지 사용자를 이동시킬 수 있다.
앱권한 화면에서 앱이 사용되지 않는 경우 권한삭제 기능을 꺼야함.

 

 


전화번호 확인
타깃 버전 Android 11이상인 경우
기존에 READ_PHONE_STATE로는 확인 할 수 없습니다. READ_PHONE_NUMBERS를 사용 해야함.
만약 전화번호 확인만 필요한 경우면 READ_PHONE_STATE를 maxSdkVersion="29"를 이용해 받아오고
그 이상은 READ_PHONE_NUMBERS로 받아오게 설정 할 수 있습니다.

 

 


Mac Address
타깃 SDK 버전이 30 이상인 경우
Mac Address를 확인할 수 없음.(다 막았다고 함)

영향을 받는 기능
getifaddrs()
NetworkInterface.getHardwareAddress()
ip명령어
NETLINK_ROUTE 소켓에 bind() 불가

 

 

타깃 30 적용 기간
새로운앱 2021년 8월 초
모든앱 2021년 12월 초

 


범위 지정 저장소
1. 앱 고유의 저장소에는 제한 없이 접근 가능
2. 미디어/다운로드 수정도 제약 없이 가능
3. 다른앱이 만든 파일, 실행시에 얻은 권한으로는 공유 미디어 읽기만 가능
4. 공유미디어 파일 변경 시 사용자 확인을 받아야 함
5. 그림에 있는 위치정보(?), 위치 메타데이터는 새로운 권한으로 허가 받아야 함.

범위 지정 저장소의 개선
1. 파일 경로 API지원 추가 - 기존에 미디어 스토어를 사용하지 않고 다른 레거시 API를 사용했던 경우도 경로를 바꾸는 것만으로도 사용할 수 있도록 추가했습니다.
2. 다중 파일 수정을 위한 API 제공 - 여러파일 한번에 추가 하거나 삭제 할 경우
3. 모든 파일 접근을 위한 새로운 권한 추가
4. 외부 앱 디렉토리까지 앱 전용 공간으로 지정 - SdCard라든가 다른 프로세스도 접근할 수 있는 공간도 앱 전용 공간으로 만들어 접근하지 못하도록 만들었다.

 


미디어 수정을 위한 API가 추가 되었다.
다른 유저가 만든 미디어에 대해서 쓰거나 지우거나 할 경우에는 사용자에게 일일이 물어보게 된다. 여러개도 가능하다.
createWriteREquest
createDeleteRequest

 


모든파일 접근 권한
MANAGE_EXTERNAL_STORAGE
: 모든 공유 파일을 수정할 수 있음
: 특수한 앱 접근 - 파일 탐색기 등 (실행 시에 부여 불가)
: Google Play 리뷰 대상 - 특별한 이유없으면 거부 대상이 됨.


마이그레이션 팁
미디어 스토어 API로 바꾸는게 완벽한 방법(하위 호환성 좋고 성능이 좋다)

미디어 수정시에는
MediaStore 새 API사용 (번거롭더라도 OS분기를 해야할 필요가 있다.)
:createWriteREquest
:createDeleteRequest

 

 

최상위 레벨 디렉토리명 더 이상 쓸 수 없다
: ROOT에 다운로드, SDCard 디렉토리 직접 지정 하는 경우(마이그레이션 이슈 발생)
-> OS변경을 감지해서 11로 업데이트 되었다면 기존 패스에서 새로운 패스로 미디어를 복사하는 작업이 필요하다(필요한 경우인듯)
-> 위에 번거로운 복사 작업을 방지하기 위해, 새로운 플레그가 추가되었다(preserveLegacyExternalStorage).

그렇게 하면 구 버전 API에서도 업그레이드 한 경우 마이그레이션을 바이 패스 할수있다.(?)
안드로이드 11에서 설치 or 재 설치한 경우에는 새로운 패스를 이용할수 있게 하고있다.

현재 Scoped Storage 외부에 저장 한 데이터를 마이그레이션하는 데 권장되는 방법은 무엇입니까?

  • preserveLegacyExternalStorage 플래그를 사용하면 Android 11을 대상으로하는 경우에도 앱이 업그레이드시 레거시 저장소 액세스를 유지할 수 있습니다.

 


특정앱과 데이터를 공유하고 싶은경우에는
Content Provider를 이용하는게 가장 안전하다.

 

 

참조 :

https://hooun.tistory.com/25

https://youngest-programming.tistory.com/386#comment14580099

반응형