멀티 사용자 지원

Android는 사용자 계정과 애플리케이션 데이터를 분리해 하나의 Android 기기에서 여러 사용자를 지원합니다. 예를 들어, 부모가 아이들의 가족용 태블릿 사용을 허용하거나, 가족이 자동차를 공유하거나, 긴급 대응팀이 당직 업무를 위해 휴대기기를 공유할 수 있습니다.

용어

Android에서는 Android 사용자와 계정을 설명할 때 다음 용어를 사용합니다.

일반

Android 기기 관리에서는 다음 일반 용어를 사용합니다.

  • 사용자:사용자는 실제 개인을 가리키는 데 사용하는 용어입니다. 각 사용자에게는 별개의 애플리케이션 데이터와 일부 고유한 설정 및 사용자 간의 명확한 전환을 위한 사용자 인터페이스가 있습니다. 한 사용자가 활성 상태이면 다른 사용자는 백그라운드에서 실행될 수 있습니다. 필요한 경우 시스템에서 리소스를 절약하기 위해 사용자를 종료할 수 있습니다. 보조 사용자는 사용자 인터페이스를 통해 직접 생성하거나 기기 관리 애플리케이션에서 생성할 수 있습니다.
  • 계정: 계정은 사용자 내에 포함되지만 사용자가 정의하지 않습니다. 사용자가 특정 계정으로 정의되거나 연결되지도 않습니다. 사용자 및 프로필에는 고유한 계정이 있지만 계정이 있어야 작동하는 것은 아닙니다. 계정 목록은 사용자별로 다릅니다. 자세한 내용은 Account 클래스 정의를 참고하세요.
  • 프로필: 프로필은 분리된 앱 데이터를 보유하지만, 일부 시스템 차원의 설정(예: Wi-Fi 및 블루투스)을 공유합니다. 프로필은 사용자 존재의 하위 집합이자 사용자 존재와 연결되어 있습니다. 사용자는 프로필을 여러 개 가질 수 있습니다. 프로필은 기기 관리 애플리케이션을 통해 생성합니다. 프로필에는 항상 상위 사용자와의 변하지 않는 연결이 있는데, 이는 프로필을 생성한 사용자가 정의합니다. 프로필은 프로필을 생성한 사용자보다 오래 존재할 수 없습니다.
  • 앱: 애플리케이션 데이터는 연결된 각 사용자 내에 있습니다. 앱 데이터에는 동일한 사용자 내 다른 애플리케이션에서 샌드박스가 설정됩니다. 동일한 사용자 내의 앱은 IPC를 통해 상호작용할 수 있습니다. 자세한 내용은 기업용 Android를 참고하세요.

사용자 카테고리

Android 기기 관리에서는 다음과 같은 사용자 카테고리를 사용합니다.

  • 시스템 사용자: 기기에 추가된 첫 번째 사용자입니다. 시스템 사용자는 초기화해야 삭제할 수 있으며 다른 사용자가 포그라운드에 있더라도 항상 실행 중입니다. 또한, 시스템 사용자는 시스템 사용자만 설정할 수 있는 특별한 권한과 설정을 갖습니다.
  • 헤드리스 시스템 사용자: 헤드리스 시스템 사용자 모드로 실행되도록(ro.fw.mu.headless_system_user=true를 설정하여) 기기가 구성된 경우 기기에 추가된 첫 번째 사용자입니다. 헤드리스 시스템 사용자는 항상 백그라운드에서 실행되므로 이러한 기기에는 추가 포그라운드 사용자가 있어야 사용자 상호작용을 사용 설정할 수 있습니다.
  • 보조 사용자: 시스템 사용자 외에 기기에 추가된 모든 사용자입니다. 보조 사용자는 보조 사용자 본인 또는 관리자가 삭제할 수 있으며 기기의 다른 사용자에게 영향을 주지 않습니다. 보조 사용자는 백그라운드에서 실행될 수 있으며 네트워크에 계속 연결되어 있을 수 있습니다.
  • 게스트 사용자: 임시 보조 사용자입니다. 게스트 사용자에게는 필요를 다하면 신속하게 게스트 사용자를 삭제할 수 있는 명시적 옵션이 있습니다. 게스트 사용자는 한 번에 한 명만 있을 수 있습니다.
  • 관리자: 다른 사용자를 만들고 삭제할 뿐 아니라 일반적인 멀티 사용자 설정을 제어할 수 있는 권한이 있는 사용자입니다. 기본적으로 시스템 사용자만 관리자입니다.

프로필 카테고리

Android에서는 다음과 같은 프로필 카테고리를 사용합니다.

  • 관리 프로필: 직장 데이터와 앱을 포함하기 위해 애플리케이션에서 만듭니다. 관리 프로필은 프로필 소유자(회사 프로필을 생성한 앱)가 전적으로 관리합니다. 상위 사용자와 회사 프로필은 런처, 알림 및 최근 작업을 공유합니다.
  • 제한된 프로필: 제한된 프로필에서 사용 가능한 앱을 제어할 수 있는 상위 사용자 기반의 계정을 사용합니다. 태블릿 및 TV 기기에서만 사용할 수 있습니다.
  • 클론 프로필: Android에서는 별도의 클론 프로필 사용자 유형의 생성을 지원하여 기기에서 단일 앱의 두 인스턴스를 실행할 수 있도록 합니다. AOSP에서는 이 기능의 엔드 투 엔드 지원을 제공하지 않습니다. OEM은 Android 사용자에게 완전한 기능을 제공하기 위해 맞춤설정을 추가해야 합니다.

사용자 유형

Android 11에는 위의 사용자와 프로필 분류가 잘 정의된 사용자 유형이 공식화되어 있습니다. 이러한 유형은 Android 멀티 사용자 기능에서 허용하는 다양한 유형의 사용자와 프로필을 나타냅니다.

사전 정의된 AOSP 사용자 유형은 frameworks/base/core/java/android/os/UserManager.java에 정의되어 있으며 현재 다음을 포함합니다.

  • android.os.usertype.full.SYSTEM
  • android.os.usertype.full.SECONDARY
  • android.os.usertype.full.GUEST
  • android.os.usertype.full.DEMO
  • android.os.usertype.full.RESTRICTED
  • android.os.usertype.profile.MANAGED
  • android.os.usertype.system.HEADLESS
  • android.os.usertype.profile.CLONE

OEM은 frameworks/base/core/res/res/xml/config_user_types.xml 파일을 오버레이하여 이러한 사용자 유형을 구성할 수 있습니다. 이렇게 하면 기본 제한, 아이콘, 배지, 최대 허용 사용자 수를 포함하여 각 사용자 유형의 기본 구성을 쉽게 변경할 수 있습니다.

OEM은 구성 가능한 AOSP 사용자 유형 외에도 frameworks/base/core/res/res/xml/config_user_types.xml 파일을 사용하여 새 프로필 유형을 정의할 수 있습니다. OEM은 이를 통해 원하는 경우 비관리 프로필 유형을 자체적으로 도입할 수 있습니다. 그러나, 필요에 따라 이제 관리 프로필이 새 프로필 유형을 처리하는지 확인하기 위한 코드 수정을 비롯하여 이러한 변경사항을 지원하기 위해 필요한 플랫폼 수정은 OEM이 담당합니다.

멀티 사용자 사용 설정

멀티 사용자 기능은 기본적으로 사용 중지되어 있습니다. 이 기능을 사용 설정하려면 기기 제조업체에서 frameworks/base/core/res/res/values/config.xml의 다음 값을 교체하는 리소스 오버레이를 정의해야 합니다.

<!--  Maximum number of supported users -->
<integer name="config_multiuserMaximumUsers">1</integer>
<!--  Whether Multiuser UI should be shown -->
<bool name="config_enableMultiUserUI">false</bool>

이 오버레이를 적용하고 기기에서 게스트 및 보조 사용자를 사용 설정하려면 Android 빌드 시스템의 DEVICE_PACKAGE_OVERLAYS 기능을 사용하여 다음 값을 교체합니다.

  • config_multiuserMaximumUsers 값을 1보다 큰 값으로 교체
  • config_enableMultiUserUI 값을 true로 교체

기기 제조업체에서는 최대 사용자 수를 결정할 수 있습니다. 기기 제조업체 등이 설정을 수정한 경우 SMS 및 전화 통신이 Android 호환성 정의 문서(CDD)에 정의된 대로 작동하는지 확인해야 합니다.

여러 사용자 관리

사용자 및 프로필 관리(제한된 프로필 제외)는 사용을 제한하기 위해 DevicePolicyManager 클래스의 API를 프로그래매틱 방식으로 호출하는 애플리케이션에서 실행합니다.

기업에서는 기기에서 앱과 데이터의 전체 기간 및 범위를 관리하기 위해 사용자와 프로필을 선택할 수 있고 DevicePolicyManagerUserManager API와 함께 위에 설명된 유형을 사용하여 사용 사례에 맞는 고유한 솔루션을 빌드할 수 있습니다.

멀티 사용자 시스템 동작

사용자가 기기에 추가된 경우 다른 사용자가 포그라운드에 있으면 일부 기능이 축소될 수 있습니다. 앱 데이터는 사용자별로 구분되기 때문에 앱의 상태는 사용자마다 다릅니다. 예를 들어, 현재 활성 상태가 아닌 사용자의 계정으로 전송되는 이메일은 사용자 및 계정이 기기에서 활성 상태가 될 때까지 사용할 수 없습니다.

참고: 보조 사용자의 전화 및 SMS 기능을 사용 설정 또는 사용 중지하려면 설정 > 사용자로 이동하여 사용자를 선택하고 전화 통화 및 SMS 허용 설정을 끕니다.

보조 사용자가 백그라운드에 있으면 일부 제한사항이 적용됩니다. 예를 들어, 백그라운드에 있는 보조 사용자는 사용자 인터페이스를 표시하거나 블루투스 서비스를 활성화할 수 없습니다. 또한, 포그라운드 사용자의 작업을 위해 기기에 추가 메모리가 필요한 경우 시스템에서 백그라운드에 있는 보조 사용자를 실행 중지합니다.

Android 기기에서 여러 사용자를 선택할 때 다음 동작을 염두에 두세요.

  • 알림은 한 번에 단일 사용자의 모든 계정에 대해 나타납니다.
  • 다른 사용자에 대한 알림은 해당 사용자가 활성화될 때까지 표시되지 않습니다.
  • 각 사용자는 앱을 설치하고 배치할 수 있는 작업공간을 갖습니다.
  • 다른 사용자의 앱 데이터에 액세스 할 수 있는 사용자는 없습니다.
  • 사용자 누구나 모든 사용자를 위해 설치된 앱에 영향을 줄 수 있습니다.
  • 관리자는 보조 사용자가 설정한 앱 또는 전체 작업공간도 삭제할 수 있습니다.
  • 기본적으로 게스트 사용자 세션의 정보는 게스트 모드를 종료하면 유지되지 않습니다. 게스트 사용자 세션의 정보를 유지하려면 config_guestUserAllowEphemeralStateChangefalse로 설정하는 리소스 오버레이 파일을 만들어야 합니다. 오버레이 파일 작성에 관한 자세한 내용은 리소스 오버레이로 빌드 맞춤설정하기를 참고하세요.

Android Automotive 멀티 사용자

Android Automotive는 Android의 멀티 사용자 구현을 사용하여 공유 기기 환경을 제공합니다.

Automotive 사용자 유형

위에 나열된 사용자 유형 외에도 Automotive 빌드에서는 다음 사용자 유형을 살펴볼 필요가 있습니다.

  • 헤드리스 시스템 사용자 시스템 사용자는 모든 시스템 서비스를 호스팅합니다. Automotive에서 여러 사용자를 지원하려면 시스템 사용자도 헤드리스여야 합니다. 헤드리스 사용자는 한 명뿐입니다. 헤드리스 시스템 사용자의 특징은 다음과 같습니다.
    • 항상 백그라운드에서 실행해야 합니다.
    • 기기 프로비저닝의 경우를 제외하고는 사용자가 직접 삭제하거나 액세스할 수 없습니다. 예를 들어, 사용자는 앱 다운로드 또는 계정 추가와 같은 작업을 실행하기 위해 이 사용자 유형으로 전환할 수 없습니다.
    • 초기화를 통해서만 삭제할 수 있습니다.
  • 일반 사용자. 위에서 설명한 보조 사용자와 동일하지만, 다음과 같은 점에서 차이가 있습니다.
    • 백그라운드에서 실행되지 않습니다(전환된 이후).
    • 사용자 인터페이스를 통해 직접 생성할 수 있습니다.
    • 앱 데이터를 분리했지만 일부 시스템 차원 설정은 공유합니다. 예를 들어, Wi-Fi 및 블루투스 설정을 공유합니다.

주의사항

Automotive의 헤드리스 시스템 사용자 및 일반(보조) 사용자에게는 다음 예외가 적용됩니다.

  • 헤드리스 시스템 사용자는 직장 프로필을 지원하지 않습니다.
  • 기본적으로 일반(보조) 사용자는 전화 통화 및 문자에 대한 전체 액세스 권한을 갖습니다.
  • 기본적으로 일반(보조) 사용자는 백그라운드에서 실행되지 않습니다.

헤드리스 시스템 사용자 사용 설정

Android 10부터 멀티 사용자 기능을 Automotive 사용 사례에 사용할 수 있습니다. 중요한 특징은 다음과 같습니다.

  • 시스템 사용자는 헤드리스이며 백그라운드에서만 실행됩니다.
  • 인간 사용자는 시스템 사용자와 상호 작용하지 않습니다.

헤드리스 시스템 사용자를 사용 설정하려면 위에서 설명한 대로 기기 제조업체가 멀티 사용자를 사용 설정해야 합니다.

헤드리스 사용자가 사용 설정된 경우,
  1. 기기를 Automotive로 선언하려면 android.hardware.type.automotive 기능을 추가합니다.
  2. ro.fw.headless_system_usertrue로 설정합니다.
  3. config_multiuserMaximumUsers 값을 2 이상으로 설정합니다.

자세한 내용은 Automotive의 멀티 사용자 지원을 참고하세요.

다중 디스플레이에서의 Android Automotive 멀티 사용자

Android 14의 새로운 실험용 기능을 사용하면 전체 액세스 권한을 갖는 보조 사용자(현재 포그라운드 사용자가 아닌 사용자)가 활동을 실행하고 자신에게 할당된 화면의 UI에 액세스할 수 있습니다. 이 기능은 Android Automotive OS에서 여러 명의 동시 사용자를 사용 설정하여 Android 단일 인스턴스에서 전용 UI 환경을 사용하는 승객을 여러 명 제공하는 자동차용 환경을 지원합니다.

개발용으로 이 기능을 사용 설정하려면 기기 제조업체에서 리소스 오버레이를 정의하여 frameworks/base/core/res/res/values/config.xml에서 다음 값을 교체해야 합니다.

<!-- Whether the device allows users to start in background visible on displays.
    Should be false for all devices in production. Can be enabled only for development use
    in automotive vehicles with passenger displays. -->

<bool name="config_multiuserVisibleBackgroundUsers">false></bool>

다음의 환경설정을 추가로 사용 설정하여 승객 전용(운전자 제외) 환경으로 실험할 수 있습니다.

<!-- Whether the device allows users to start in background visible on the default display.
    Should be false for all devices in production. Can be enabled only for development use
    in passenger-only automotive build (i.e., when Android runs in a separate system in the
    back seat to manage the passenger displays).
    When set to true, config_multiuserVisibleBackgroundUsers must also be true. -->

<bool name="config_multiuserVisibleBackgroundUsersOnDefaultDisplay">false</bool>

Android 14에서는 게스트 사용자로 여러 승객에게 맞는 자동차용 환경을 사용 설정할 수 있습니다. 개발용으로 여러 명의 게스트 사용자를 사용 설정하려면 기기 제조업체가 frameworks/base/core/res/res/xml/config_user_types.xml에서 리소스 오버레이를 정의하여 최대 허용 게스트 사용자 수를 설정해야 합니다(아래 예 참고).

<user-types>
   <full-type
       name="android.os.usertype.full.GUEST"
       max-allowed='4'>
       <default-restrictions no_factory_reset="true"
           no_remove_user="true"
           no_modify_accounts="true"
           no_install_apps="true"
           no_install_unknown_sources="true"
           no_uninstall_apps="true"/>
   </full-type>
</user-types>