본문 바로가기
안드로이드/기타

TargetSDK 33 버전으로 업데이트

by 나이아카 2023. 8. 30.

2023년 8월 19일 자로 GooglePlay에서 메일이 날아왔습니다. 바로 TargetSDK를 33 미만으로 설정하게 되면 업데이트할 수 없다는 사항이었는데요. 마침 회사에서 이미 TargetSDK를 33으로 올리기 위해 코드를 분석하고 있던 단계여서 정리된 부분을 블로그에 좀 옮겨둘까 합니다. 물론 공식 문서와 큰 차이는 없을 겁니다... 그러니 공식 문서를 참고하셔도 무방합니다!

Android13에 대한 설명 

 

Android 13  |  Android 개발자  |  Android Developers

<!-- 설명 숨기기 -->

developer.android.com

Android 13 동작 변경사항

 

동작 변경사항: 모든 앱  |  Android 개발자  |  Android Developers

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

developer.android.com

Android 13을 타겟팅하는 앱

 

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

Android 13 이상을 타겟팅하는 앱에 영향을 미치는 Android 13의 변경사항을 알아봅니다.

developer.android.com


런타임 알림 권한(POST_NOTIFICATIONS) 추가

 기본적으로 알림(휴대폰의 상단의 바를 내렸을 때 노출되는 메시지 및 상단에 잠깐 뜨는 토스트 팝업)의 default는 true였습니다. 딱히 권한을 받지 않아도 채널이 켜져 있어서 알아서 FCM PUSH와 같은 것들을 전달해줄 수 있었는데요! 이제는 직접 사용자에게 권한을 받아와야 합니다. 그렇지 않으면 항상 notification이 off로 변해 사용자가 알림을 받기 위해선 설정 화면으로 들어가 직접 수동으로 체크해줘야 합니다. 그렇다면 이를 적용하기 위해 현재 앱의 상태와 변경 상태를 나눠 알아보겠습니다.

 먼저 제가 수정중인 앱은 현재 TargetSDK가 32입니다. 현재 32버전인 제 앱을 33버전을 이용하는 안드로이드 디바이스가 실행한다면, 제가 채널을 생성하려고 하는 그 위치에서 바로 권한 팝업이 동작하게 됩니다. 이때 거부를 누르면 앱에서 생성하는 모든 채널의 알람 수신이 불가능해집니다. 이후에 앱에서의 알람을 수신 받기 위해서는 직접 설정 화면에서 들어가야 합니다. 다행히도 안드로이드 디바이스가 33버전 미만이라면 알림 권한 없이 그대로 사용 가능합니다.

 그렇다면 제가 TargetSDK를 33으로 올리면 어떻게 될까요? 일단 TargetSDK를 33으로 올린 이후에는 SDK가 33인 안드로이드 디바이스의 경우 권한 허용 알림이 발생하지 않습니다. 그렇기 때문에 Target을 올리기 전에 필수적으로 POST_NOTIFICATIONS 권한의 알림을 띄워줄 위치를 지정해야 합니다. 지정되지 않으면 앱은 계속 알림 권한이 차단인 상태로 유지되게 되어, 사용자는 직접 설정에서 앱을 켜지 않는 이상 알림 권한의 존재여부도 알 수 없습니다. 그래도 다행인 건 역시 안드로이드 디바이스가 33버전 미만이라면 알림 권한 없이 그대로 사용 가능합니다.

 

미디어 권한 세분화

 그 다음은 미디어 권한 세분화입니다. 원래는 READ_EXTERNAL_STORAGE 권한 하나면 충분했는데, 이를 3가지(READ_MEDIA_IMAGES, READ_MEDIA_VIDEO, READ_MEDIA_AUDIO)로 분리한다고 합니다.

 기존에 이미 READ_EXTERNAL_STORAGE 권한을 허용한 상태라면 자동적으로 세분화된 권한 중, 앱에서 사용한다고 명시해둔 권한들은 허용 상태로 들어가 있게 됩니다. 그러나 첫 설치의 경우는 또 여러 조건에 따라 달라집니다.

 위와 같이 상황을 나눠서 보자면 먼저, TargetSDK를 33으로 올리기 전이라 READ_EXTERNAL_STORAGE 권한을 쓰는 상태에서 SDK가 33인 안드로이드 디바이스에서는 기기의 사진, 동영상, 음악, 오디오에 엑세스 하도록~ 의 문구가 뜨면서 한 번에 모든 권한을 받아오게 됩니다. 물론 33 미만 버전을 이용하는 경우에도 저장공간 관련 문구와 함께 위 권한을 받습니다. 이는 내 앱의 TargetSDK가 33을 바라보고 있지 않다면, READ_EXTERNAL_STORAGE 권한을 사용한다는 것을 의미합니다.

 만약 내 앱의 TargetSDK가 33이라면, 이제 조금 다릅니다. 일단 33 미만 안드로이드 디바이스의 경우 READ_MEDIA_IMAGES, READ_MEDIA_VIDEO, READ_MEDIA_AUDIO 권한을 요청할 경우 권한 허용 팝업이 등장하지 않습니다.  또한, 33이상 디바이스에서는 READ_EXTERNAL_STORAGE 권한을 요청하게 되면 권한 허용 팝업이 등장하지 않습니다. 그렇기 때문에 TargetSDK가 33인 경우에는 33미만 디바이스와 33이상 디바이스를 구분해서 권한을 요청해야 합니다. 

 

WebView 변경점

WebView의 setAppCachePath, setAppCacheMaxSize, setAppCacheEnabled 등, 웹뷰의 캐시 관련 내용이 사라집니다. 이 부분은 주로 webSetting.setCacheMode가 WebSetting.LOAD_NO_CACHE가 아닌 경우 해당되며 이는 chrome 85부터 AppCache가 제거됨에 따라 안드로이드 chromium 버전 업데이트를 위한 조치로 보입니다. 그래서 TargetSDK가 33인 경우부터는 웹뷰의 캐시 기능이 사라졌다고 생각하면 될 것 같습니다.

 

기타

MediaMetadataRetriever 라는 클래스를 사용한다면, close()와 release()를 사용할 때 IOException이 발생할 수 있습니다. 그래서 각 메소드를 try-catch로 감싸주어야 합니다. 이번 기회에 실패했을 때의 경우를 추가해보시면 좋을 것 같습니다.

PackageManager FEATURE_CONNECTION_SERVICE, getPackageInfo (String packageName, int flags), getPackageInfo (VersionedPackage versionedPackage, int flags), getActivityInfo(ComponentName component, int flags), getApplicationInfo (String packageName, int flags), getInstalledApplications (int flags), getInstalledPackages (int flags), getPackageArchiveInfo (String archiveFilePath, int flags), getPackageUid (String packageName, int flags)등이 사라집니다. 이외에도 사라지는 것들이 많으니 무작정 올려서 확인해보시거나 공식 홈페이지를 참조해서 자신이 사용중인 코드가 무엇인지 확인해주시길 바랍니다.

구글 광고를 앱에 넣어두고 있다면,

<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>

권한 선언이 필수적으로 바뀌었습니다. TargetSDK가 33인 경우 AD_ID 권한이 없으면 광고가 노출되지 않는다고 합니다.


꽤 많이 바뀌었는데, 이 글을 쓰고 있는 시점에 안드로이드 14 버전이 나왔다고 합니다. 그래서 구글이 13 버전으로의 업데이트를 빠르게 감행하는 거겠죠. 앱은 항상 변화하고, 그 변화를 위해 따라가야 하는 것이 가끔 버거울 때가 있습니다. 특히 앱을 여러개 관리한다면 더욱이요. 이런 문제 뿐만 아니라, 플레이스토어에 올려야 함으로서 지켜야 하는 것들, 제 잘못이 아님에도 불구하고(플레이스토어 문제) 앱의 평점이나 명성에 영향을 주는 문제 등 안드로이드 개발자는 신경써야 하는 부분이 참 많은 것 같습니다. 물론 모든 개발자가 마찬가지겠지만요...

댓글