안드로이드 12 업데이트

srpark·2021년 9월 9일
0

[1] 사용자는 앱이 대략적인 위치 정보에만 액세스하도록 요청할 수 있습니다.

기존 ACCESS_FINE_LOCATION 권한을 요청한다면 ACCESS_COARSE_LOCATION 권한도 요청해야합니다. 단일 런타임 요청에 두 권한을 모두 포함해야 합니다.


[2] 앱 최대 절전 모드

사용자가 몇 달 동안 앱과 상호작용하지 않는다면 시스템은 부여된 모든 권한을 자동 초기화하고 앱을 최대 절전 모드 상태로 전환합니다.

  1. 시작시 부여된 권한이 취소됩니다.
  2. 앱 캐시를 삭제해서 스토리지를 비웁니다.
  3. 모든 작업과 푸시 메시지가 중단됩니다.

[3] 더 안전한 구성요소 내보내기

인텐트 필터를 사용하는 활동이나 서비스, 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 속성을 넣어주지 않으면 앱이 설치되지 않습니다 !


[4] Splash Screens 추가

Android 12에서는 모든 앱에 새로운 앱 실행 애니메이션을 사용 설정하는 SplashScreen API를 추가합니다. 여기에는 실행 시 앱 내 모션, 앱 아이콘을 보여주는 스플래시 화면, 앱 자체로의 전환이 포함됩니다.

Splash Screens 커스텀

/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 : 스플래시 화면 하단에 표시할 이미지

[5] 포그라운드 서비스 시작 제한

몇 가지 특수한 사례를 제외하고 백그라운드에서 실행되는 동안 더 이상 포그라운드 서비스를 시작할 수 없습니다. 앱이 백그라운드에서 실행되는 동안 포그라운드 서비스를 시작하려고 하면 예외[ForegroundServiceStartNotAllowedException]가 발생합니다.

앱이 백그라운드에서 실행되는 동안 WorkManager를 사용하도록 변경이 필요합니다.


[6] Display API 중단

안드로이드 11에서 사용했던 WindowMetrics를 계속 권장하면서 다음 메서드를 지원 중단합니다.

Display.getRealSize()
Display.getRealMetrics()


[7] 블루투스 새로운 권한

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>
  1. 앱이 실제 위치가 필요없으면 android:usesPermissionFlags 속성을 BLUETOOTH_SCAN 권한 선언에 추가하고 이 속성 값을 neverForLocation으로 설정합니다.
  2. 위치가 앱에 달리 필요하지 않으면 앱의 매니페스트에서 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>

[8] ADB 백업 제한

테스트 또는 개발 워크플로가 adb backup을 사용하는 앱 데이터에 의존하는 경우 이제 android:debuggable을 앱의 매니페스트 파일에서 true로 설정하여 앱 데이터 내보내기를 선택할 수 있습니다.

주의 : 앱 데이터를 보호하려면 앱을 출시하기 전에 android:debuggable을 false로 설정해야 합니다.


profile
Android_Developer

0개의 댓글