기존 스토리지

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.
Android 외부 저장소 HAL 아이콘

Android는 변경할 수 없는 POSIX 권한 클래스 및 모드가 있는 대소문자를 구분하지 않는 파일 시스템으로 정의된 기존 저장소가 있는 기기를 지원합니다. 기존 스토리지의 개념에는 에뮬레이트 및 휴대용 스토리지가 포함됩니다. 휴대용 스토리지는 시스템에서 채택 하지 않아 포맷 및 암호화되지 않거나 특정 장치에 연결되지 않은 외부 스토리지로 정의됩니다. 기존의 외부 저장소는 저장된 데이터에 대한 최소한의 보호를 제공하기 때문에 시스템 코드는 외부 저장소에 민감한 데이터를 저장해서는 안 됩니다. 특히 구성 및 로그 파일은 효과적으로 보호할 수 있는 내부 저장소에만 저장해야 합니다.

다중 사용자 외부 저장소

Android 4.2부터 기기는 여러 사용자를 지원할 수 있으며 외부 저장소는 다음 제약 조건을 충족해야 합니다.

  • 각 사용자는 자체적으로 격리된 기본 외부 저장소가 있어야 하며 다른 사용자의 기본 외부 저장소에 액세스할 수 없어야 합니다.
  • /sdcard 경로는 프로세스가 실행 중인 사용자에 따라 올바른 사용자별 기본 외부 저장소로 확인되어야 합니다.
  • Android/obb 디렉토리의 대용량 OBB 파일을 위한 스토리지는 최적화를 위해 여러 사용자 간에 공유될 수 있습니다.
  • 보조 외부 저장소는 합성 권한에서 허용하는 패키지별 디렉터리를 제외하고 앱에서 쓸 수 없어야 합니다.

이 기능의 기본 플랫폼 구현은 Linux 커널 네임스페이스를 활용하여 각 Zygote 분기 프로세스에 대해 격리된 마운트 테이블을 생성한 다음 바인드 마운트를 사용하여 해당 개인 네임스페이스에 올바른 사용자별 기본 외부 저장소를 제공합니다.

부팅 시 시스템은 앱에서 숨겨진 EMULATED_STORAGE_SOURCE 에 단일 에뮬레이트된 외부 저장소 FUSE 데몬을 마운트합니다. Zygote 분기 후 바인드는 FUSE 데몬 아래에서 EMULATED_STORAGE_TARGET 으로 적절한 사용자별 하위 디렉터리를 마운트하여 외부 저장소 경로가 앱에 대해 올바르게 확인되도록 합니다. 앱에 다른 사용자의 저장소에 대한 액세스 가능한 탑재 지점이 없기 때문에 앱이 시작된 사용자의 저장소에만 액세스할 수 있습니다.

이 구현은 또한 공유 하위 트리 커널 기능을 사용하여 기본 루트 네임스페이스에서 앱 네임스페이스로 탑재 이벤트를 전파하여 ASEC 컨테이너 및 OBB 탑재와 같은 기능이 계속 올바르게 작동하도록 합니다. rootfs를 공유로 마운트한 다음 각 Zygote 네임스페이스가 생성된 후 슬레이브로 다시 마운트하여 이를 수행합니다.

여러 외부 저장 장치

Android 4.4부터 여러 외부 저장 장치가 Context.getExternalFilesDirs() , Context.getExternalCacheDirs()Context.getObbDirs() ) 를 통해 개발자에게 표시됩니다.

이러한 API를 통해 표시되는 외부 저장 장치는 장치의 반영구적 부분이어야 합니다(예: 배터리 구획의 SD 카드 슬롯). 개발자는 이러한 위치에 저장된 데이터가 장기간에 걸쳐 사용 가능하기를 기대합니다. 이러한 이유로 USB 대용량 저장 장치와 같은 임시 저장 장치는 이러한 API를 통해 노출되어서는 안 됩니다.

WRITE_EXTERNAL_STORAGE 권한은 장치의 기본 외부 저장소에 대한 쓰기 액세스 권한만 부여해야 합니다. 앱은 합성 권한에서 허용하는 패키지별 디렉터리를 제외하고 보조 외부 저장 장치에 쓸 수 없습니다. 이러한 방식으로 쓰기를 제한하면 응용 프로그램이 제거될 때 시스템에서 파일을 정리할 수 있습니다.

USB 미디어 지원

Android 6.0은 USB 플래시 드라이브와 같이 짧은 시간 동안만 장치에 연결되는 휴대용 저장 장치를 지원합니다. 사용자가 새 휴대용 장치를 삽입하면 플랫폼에서 해당 장치의 콘텐츠를 복사하거나 관리할 수 있도록 알림을 표시합니다.

Android 6.0에서 채택되지 않은 모든 기기는 휴대용으로 간주됩니다. 휴대용 스토리지는 짧은 시간 동안만 연결되기 때문에 플랫폼은 미디어 스캔과 같은 무거운 작업을 피할 수 있습니다. 타사 앱은 휴대용 저장소의 파일과 상호 작용하려면 저장소 액세스 프레임워크 를 통과해야 합니다. 개인 정보 및 보안상의 이유로 직접 액세스가 명시적으로 차단됩니다.