저번 Android11에서의 변경 점에 이어서, Android12에서의 변경 점에 대하여 알아보고자 한다.
역시나 개인 정보나 보안쪽으로 개선된 점이 많이 보이고, Android11보다 조금 더 수정할 수 있는 부분이 많아 보인다.
물론 이번 포스팅에서도 Android12에서 변경 된 부분에 대해 모두 작성하지 않고, 필자가 생각했을 때 확인이 필요한 부분이라고 생각되는 부분만 작성할 예정이다.
따라서, 모든 추가 변경에 대한 내용을 확인하고자 하는 사람은 Developer 페이지를 확인하길 바란다.
우선,
웹 인텐트 관련하여 변경된 사항이 있다.
Android12부터 앱이 웹 인덴트에 포함된 특정 도메인에 관해 승인된 경우에만 앱의 활동으로 확인이 된다.
도메인을 확인하는 방법으로는 Android App Links를 사용하면 된다.
App Links 관련 문서에서 확인해보면 어떤식으로 적용을 해야하는지 상세히 나와있다.
앱 링크는 개발자의 웹사이트에 속한다는 것이 확인된 웹사이트 URL 기반의 딥 링크이다.
앱 링크와 딥 링크의 차이점은 다음과 같다.
표를 확인하면 어느 부분이 다른지 확실하게 파악이 가능하다.
스키마가 http, https로 제한되며, 인텐트에 대한 작업과 카테고리가 제한된다.
무엇보다, 딥 링크를 사용했을 경우 사용 가능한 앱 목록이 뜨며 사용자에게 선택하도록 가이드가 되는데, 앱 링크의 경우 선택지를 보여주지 않고 내 앱을 사용하도록 되는 것이다.
앱 링크를 사용하는 방법은,
<application>
<activity android:name=”MainActivity”>
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" android:host="www.example.com" />
<data android:scheme="https" />
</intent-filter>
</activity>
<activity android:name=”SecondActivity”>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" android:host="www.example.net" />
</intent-filter>
</activity>
</application>
해당 스니펫 처럼 메니페스트에 작성하여 사용하면 되며, 여러개 도메인을 연속하여 선언하여 사용할 수 있다.
사용하는 자세한 방법은 Android Developers App Links 문서에서 확인하길 바란다.
https://developer.android.com/training/app-links/verify-site-associations?hl=ko
getRealSize, getRealMetrics 함수 지원이 중단된다.
Adnroid12에서는 getRealSize, getRealMetrics 함수 지원이 중단되며, WindowMetrics API 사용을 권장한다.
Developer 문서를 확인해보면 WindowMetrics API를 사용하여 동일한 동작을 구현할 수 있도록 가이드가 나와있다.
또한, Android4.0 이상을 지원하여 이전 버전과의 호환성을 높이길 원한다면 Jetpack에서 지원하는 WindowManager 라이브러리를 사용하면 된다고 한다.
Android11에서부터 getSize, getMetrics 함수 지원을 중단하고 WindowMetrics API사용을 권장했는데,
필자는 앱 화면의 크기를 구하는 부분에 대해서 많은 사용을 하지 않을 거라고 생각하였지만 이번 Android12에서 멀티 윈도우라던지, 화면 크기를 변경할 수 있는 기능들이 추가되어 해당 부분을 추가해보았다.
앱의 크기를 완전히 조절이 가능할 수 있는지의 여부에 따라서 다른 함수를 사용하도록 가이드가 되어있다.
앱의 크기를 조절할 수 있다는 것이 아직 사용해보지 않아서 정확한 의미는 모르겠지만, 다음과 같이 사용하면 된다.
WindowMetrics projectionMetrics = activityContext
.getSystemService(WindowManager.class).getMaximumWindowMetrics();
만약, 앱의 크기를 완전히 조절할 수 없는 경우에는 다음과 같이 사용하면 된다.
Context windowContext = mContext.createWindowContext(mContext.getDisplay(),
TYPE_APPLICATION, null /* options */);
WindowMetrics projectionMetrics = windowContext.getWindowManager()
.getMaximumWindowMetrics();
멀티 윈도우
Android12부터 멀티 윈도우 모드를 표준 동작으로 설정하게 된다.
멀티 윈도우란, 말 그대로 두 개 이상의 앱을 동시에 표시할 수 있도록 해주는 기능을 말한다.
멀티 윈도우 옵션이 default 값으로 설정이 되었기 때문에, Android12 부터 해당 기능을 사용하지 않길 원한다면 resizeableActivity="false" 라는 옵션을 추가해 주어야 한다.
해당 옵션은 메니페스트의 Activity 요소나 Application 요소에서 설정할 수 있다.
활동 수면 주기
Android12에서는 Launcher에 한하여 Hardware의 뒤로가기 버튼에 대한 정의가 변경된다.
지금까지는 뒤로가기 버튼을 통해서 앱을 종료하는 경우에는 onDestroy() 작업을 수행하였다.
하지만, Android12에서는 Launcher Activity일 때 뒤로가기 버튼을 사용하게 되면 단순히 앱을 백그라운드로 이동시키는 역할만 수행하게 된다.
즉, 홈 버튼을 눌러서 앱을 백그라운드로 넘길때와 동일한 동작을 하게 되는 것이다.
따라서, 이전과 동일하게 동작을 수행시키기 위해서는 onBackPressed()를 override 하여 사용해야 한다.
기존에는 뒤로가기 버튼을 눌렀을 때 onStop 뿐 아니라 onDestroy도 호출이 되었기 때문에
onBackPressed를 재 정의하여 해당 부분에서 finish()를 호출하도록 하여 onDestroy도 명시적으로 호출할 수 있게 변경해주면 되는 것이다.
Nofitication
Android12에서는 Custom Notification의 모양과 동작을 변경한다고 한다.
이전 버전까지는 레이아웃 호환성 문제를 일으킬 수 있는 안티 패턴이 있거나, 사용자에게 혼동을 줄 수 있었다고 한다.
따라서 이러한 문제를 해결한 Notification을 제공한다고 한다.
솔직히 필자는 해당 문제가 있었다는 것에 대해 전혀 알고있지 못했다.
따라서, Notification에 문제가 있었더라면 타겟 버전을 올리고 해당 변경된 Notification을 사용해보면 좋을 것 같다.
가능한 빨리 새 템플릿으로 테스트하는 것이 좋다고 하니 말이다.
대략적인 위치
Android11에 이어서 Android12에서도 위치 권한에 따른 변경사항이 추가 되었다.
위치 정보에 대한 권한을 설정할 때, 정확한 위치와 대략적인 위치에 대하여 사용자가 선택하여 권한을 설정할 수 있게 변경되었다.
해당 옵션은 정말 말 그대로, 위치 제공을 하겠지만 정확한 위치까지는 제공하고 싶지 않다. 라고 하면 대략적인 위치에 대하여만 권한을 줄 수 있다는 것이다.
필자는 해당 권한이 어떻게 표시가 되는지 확인해 보기 위해서 샘플 코드를 사용해 테스트를 해보았다.
이처럼 나오게 된다.
Precise, Approximate 라는 두 가지 선택 옵션이 뜨고, 해당 옵션에 따라서 다른 권한을 부여할 수 있게 되는 것이다.
여기서,
ACCESS_COARSE_LOCATION은 요청하지만, ACCESS_FINE_LOCATION을 요청하지 않으면 해당 변경사항은 앱에 영향을 미치지 않는다고 한다.
따라서 ACCESS_FINE_LOCATION 권한을 요청하지 않는 경우에도 확인해 보았다.
COARSE 권한만 추가하게 되면 이처럼 대략적인 위치 정보에 대한 권한을 설정하게 된다.
반대로, FINE 권한만 추가하게 되면 정상적으로 동작을 하지 않으니, FINE 권한을 요청하기 위해서는 COARSE 권한은 필수적으로 요청해야 한다.
SameSite 쿠키 적용
Android12부터 쿠키에 SameSite 속성이 적용되고,
해당 속성을 통하여 쿠키가 모든 요청과 함께 전송될 수 있는지, 동일한 사이트 요청으로만 전송될 수 있는지를 제어할 수 있게 된다.
SameSite 속성이 없는 경우, Default로 SameSite=Lax가 설정되고,
SameSite=None의 경우, Secure 속성도 지정하여 사용해야 한다.
Developer를 확인해보니 Http와 Https간의 링크는 동일한 사이트로 구분하지 않고 교차 사이트 요청으로 간주된다고 한다.
즉, http://url1 != https://url1 이 되는 것이다.
Schemeful SameSite를 통해서 http와 https간의 쿠키 요청의 여부를 확인해 보았는데,
라고 나와있다.
즉, SameSite 설정을 별도로 하지 않는 경우, Lax로 설정이 되어 기존과 동일하게 http == https 로 사용이 된다.
하지만, 속성 값을 변경하는 경우에는 위처럼 http != https 로 사용할 수 있게 된다.
웹에 관련된 내용이기는 하지만, http, https 를 혼용하고 있는 프로젝트가 있다보니 조금 더 자세히 확인해 보았다.
필자는 솔직히, 해당 내용에 대해서는 정확히 알고있어야 한다. 라기 보다는, http, https를 함께 사용하는 환경에서 쿠키 값에 대한 이슈가 있으면 해당 내용을 떠올릴 수만 있으면 될 것 같다고 생각한다.
앱 최대 절전 모드
Android12에서는 Android11에서 도입된 권한 자동 초기화 동작을 확장한 앱 최대 절전 모드를 제공한다.
권한 자동 초기화와 마찬가지로, 사용자가 일정 기간(몇 달)동안 앱을 사용하지 않는다면 시스템이 앱의 권한을 초기화 할 뿐 아니라 최대 절전 모드 상태로 전환시킨다.
최대 절전 모드는 사용자가 앱을 강제로 종료할 때와 마찬가지의 동작을 수행하며, 해당 동작은 코드를 추가하여 사용하지 않도록 설정할 수 있다.
Android12에서의 변경된 부분은 생각보다 신경 써줘야 하는 부분들이 많은 것 같다.
이것들 외에도 새로 추가되고 제거된 부분이 상당히 많은 것 같다.
데이터 액세스 부분이라던지, ADB 백업에 관련된 거라던지 필자는 많이 사용하지 않기 때문에 중요할 것 같지 않다. 라고 넘어갔지만 그렇지 않은 부분들도 존재할터이니 Developers 문서를 확인하는 것이 좋을 것 같다.
Adnroid13이 나오기 전에 이전 버전의 변경점에 대하여 한번 훑어봤는데,
필요할 때 마다 필요한 부분만 찾아봐서 그런지 몇 번을 봤던 문서임에도 불구하고 처음 본다고 생각하는 내용들이 좀 있었다.
해당 글 또한 마찬가지로 필자가 생각하기에 영향이 클 것 같다. 라고 생각한 부분만 정리하였기 때문에, 추후 업무를 진행하다가 필요하다면 글에 추가하지 않을까 생각한다.
해당 게시글을 작성하기 위하여 참고한 Developer 문서를 링크로 추가해두도록 하겠다.
https://developer.android.com/about/versions/12/behavior-changes-all?hl=ko
'Android > Android Version' 카테고리의 다른 글
[Android] Android 14 (SDK 34) 버전의 Media Permission 설정하기 (0) | 2024.08.20 |
---|---|
[Android] Android 14 (SDK 34) 버전을 targetSDK로 사용할 때 주의할 점 몇가지 (0) | 2024.04.04 |
[Android] SDK31 외부 Library Export 설정 변경하기 (0) | 2022.12.18 |
[Android] Android 12 Splash Screen 사용하기. (4) | 2022.06.23 |
[Android] Android11에서의 변경 점 (0) | 2022.03.08 |