기존 ACCESS_FINE_LOCATION 권한을 요청한다면 ACCESS_COARSE_LOCATION 권한도 요청해야합니다. 단일 런타임 요청에 두 권한을 모두 포함해야 합니다.
사용자가 몇 달 동안 앱과 상호작용하지 않는다면 시스템은 부여된 모든 권한을 자동 초기화하고 앱을 최대 절전 모드 상태로 전환합니다.
- 시작시 부여된 권한이 취소됩니다.
- 앱 캐시를 삭제해서 스토리지를 비웁니다.
- 모든 작업과 푸시 메시지가 중단됩니다.
인텐트 필터를 사용하는 활동이나 서비스, broadcast receiver를 포함하면 이러한 앱 구성요소의 android:exported 속성을 명시적으로 선언해야 합니다.
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
필수 : AndroidManifest.xml에서 위의 코드를 가지는 Splash화면에 android:exported 속성을 넣어주지 않으면 앱이 설치되지 않습니다 !
Android 12에서는 모든 앱에 새로운 앱 실행 애니메이션을 사용 설정하는 SplashScreen API를 추가합니다. 여기에는 실행 시 앱 내 모션, 앱 아이콘을 보여주는 스플래시 화면, 앱 자체로의 전환이 포함됩니다.
/res/values/themes/themes.xml(기존 style.xml)에서 커스텀할 수 있습니다.
<resources xmlns:tools="http://schemas.android.com/tools">
<style name="Theme.SplashScreen" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
<item name="android:windowSplashScreenBackground">@color/...</item>
<item name="android:windowSplashScreenAnimatedIcon">@drawable/...</item>
<item name="android:windowSplashScreenAnimationDuration">800</item>
<item name="android:windowSplashScreenIconBackground">@color/...</item>
<item name="android:windowSplashScreenBrandingImage">@drawable/...</item>
</style>
</resources>
- windowSplashScreenBackground : Background color에 대한 속성
- windowSplashScreenAnimatedIcon : 중앙아이콘
- windowSplashScreenAnimationDuration : 화면이 닫히기 전의 표시되는 시간
- windowSplashScreenIconBackgroundColor : // 중앙아이콘 뒤의 배경색
- windowSplashScreenBrandingImage : 스플래시 화면 하단에 표시할 이미지
몇 가지 특수한 사례를 제외하고 백그라운드에서 실행되는 동안 더 이상 포그라운드 서비스를 시작할 수 없습니다. 앱이 백그라운드에서 실행되는 동안 포그라운드 서비스를 시작하려고 하면 예외[ForegroundServiceStartNotAllowedException]가 발생합니다.
앱이 백그라운드에서 실행되는 동안 WorkManager를 사용하도록 변경이 필요합니다.
안드로이드 11에서 사용했던 WindowMetrics를 계속 권장하면서 다음 메서드를 지원 중단합니다.
Display.getRealSize()
Display.getRealMetrics()
BLUETOOTH_SCAN, BLUETOOTH_ADVERTISE, BLUETOOTH_CONNECT 권한을 도입합니다. 이를 통해 앱이 위치 정보 액세스 권한을 요청하지 않고도 근처 기기를 검색할 수 있습니다.
- BLE 블루투스 기기를 검색하는 경우 BLUETOOTH_SCAN 추가
- 다른 블루투스 기기에서 검색하려면 BLUETOOTH_ADVERTISE 추가
- 페어링된 블루투스 기기와 통신한다면 BLUETOOTH_CONNECT 추가
- 기존 블루투스 관련 권한 선언의 경우 android:maxSdkVersion을 30으로 설정
<manifest>
<uses-permission android:name="android.permission.BLUETOOTH"
android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"
android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
...
</manifest>
- 앱이 실제 위치가 필요없으면 android:usesPermissionFlags 속성을 BLUETOOTH_SCAN 권한 선언에 추가하고 이 속성 값을 neverForLocation으로 설정합니다.
- 위치가 앱에 달리 필요하지 않으면 앱의 매니페스트에서 ACCESS_FINE_LOCATION 권한을 삭제합니다.
<manifest>
<uses-permission android:name="android.permission.BLUETOOTH"
android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"
android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"
android:usesPermissionFlags="neverForLocation" />
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
...
</manifest>
테스트 또는 개발 워크플로가 adb backup을 사용하는 앱 데이터에 의존하는 경우 이제 android:debuggable을 앱의 매니페스트 파일에서 true로 설정하여 앱 데이터 내보내기를 선택할 수 있습니다.
주의 : 앱 데이터를 보호하려면 앱을 출시하기 전에 android:debuggable을 false로 설정해야 합니다.