Android 범위 저장소 이해: 변경 사항 및 중요한 이유

A smartphone beside small storage drawers with one locked, illustrating Android scoped storage

Android 기기에서 파일을 관리해 본 적이 있다면 실행 중인 Android 버전에 따라 작업이 다르게 작동한다는 것을 눈치채셨을 것입니다. Android 10부터 Google은 앱이 파일 시스템과 상호 작용하는 방식에 근본적인 변화를 도입했습니다. 범위 지정 저장소로 알려진 이 변경 사항은 공유 저장소에서 파일 읽기 및 쓰기에 대한 규칙을 재정의했습니다. 앱을 사이드로드하거나, OBB 파일을 관리하거나, 파일 관리자로 작업하는 사용자의 경우 범위 지정 저장소를 이해하는 것이 필수적입니다.

이 기사에서는 범위 지정 저장소가 무엇인지, Google에서 이를 구현한 이유, 일반 사용자와 개발자에게 미치는 영향, Play 스토어 외부에서 APK 또는 XAPK 파일을 설치하는 모든 사람에게 의미하는 바를 살펴보겠습니다.

기존 스토리지 모델의 문제점

Android 10 이전에는 READ_EXTERNAL_STORAGE 또는 WRITE_EXTERNAL_STORAGE 권한을 요청한 모든 앱이 기기의 공유 저장소에 있는 거의 모든 파일에 액세스할 수 있었습니다. 여기에는 사진, 문서, 다운로드는 물론 다른 앱에서 생성된 파일까지 포함됩니다. 이로 인해 파일 관리가 편리해졌지만 심각한 개인 정보 보호 및 보안 문제가 발생했습니다.

간단한 손전등 앱을 생각해 보세요. 이전 모델에서는 저장 권한을 부여하면 자동으로 사진을 읽고, 다운로드한 문서를 스캔하고, 심지어 다른 애플리케이션에 속한 파일을 수정할 수도 있었습니다. 세밀한 제어가 없었습니다. 앱에 전체 저장소에 대한 전체 액세스 권한을 부여하거나 완전히 거부했습니다.

이러한 광범위한 접근으로 인해 실제 문제가 발생했습니다. 일부 앱은 저장소에서 민감한 파일을 검색하여 사용자 데이터를 수집했습니다. 다른 사람들은 앱이 제거된 후에도 오랫동안 장치를 어수선하게 만드는 분리된 파일을 남겨두었습니다. Google에는 유용성과 개인 정보 보호의 균형을 맞추는 솔루션이 필요했고 범위 지정 저장소가 해결책이었습니다.

범위 지정 저장소가 실제로 수행하는 작업

범위 지정 저장소는 앱과 파일 시스템 간의 관계를 근본적으로 변화시킵니다. 이 모델에서 각 앱은 일반적으로 /Android/data/[package.name]/에 있는 외부 저장소에 자체 비공개 샌드박스를 갖습니다. 앱은 권한이 전혀 필요 없이 자체 샌드박스 내에서 자유롭게 읽고 쓸 수 있습니다.

그러나 이 샌드박스 외부의 파일에 액세스하려면 제어된 API를 거쳐야 합니다. 새 모델의 작동 방식은 다음과 같습니다.

앱별 저장소

모든 앱에는 해당 앱만 액세스할 수 있는 전용 디렉터리가 있습니다. 앱이 제거되면 이 디렉터리는 자동으로 정리됩니다. 루트 액세스 없이는 다른 앱이 이 위치를 읽거나 쓸 수 없습니다. 이는 고아 파일 문제를 제거하고 앱 간 데이터 스누핑을 방지합니다.

미디어 컬렉션

사진, 비디오, 오디오 파일과 같은 공유 미디어의 경우 Android는 MediaStore API를 제공합니다. 앱은 공유 컬렉션에 미디어를 제공하고 다른 앱에서 생성된 미디어를 읽을 수 있지만 이 구조화된 인터페이스를 통해서만 가능합니다. 앱은 권한 없이 자체 미디어를 볼 수 있지만, 다른 앱의 미디어에 액세스하려면 Android 13에 도입된 READ_MEDIA_IMAGES, READ_MEDIA_VIDEO 또는 READ_MEDIA_AUDIO 권한이 필요합니다.

저장소 액세스 프레임워크

문서 및 기타 비미디어 파일의 경우 앱은 SAF(Storage Access Framework)를 사용해야 합니다. 이는 앱이 액세스할 수 있는 파일이나 디렉터리를 명시적으로 선택하는 시스템 파일 선택기를 사용자에게 제공합니다. 앱은 전체 파일 시스템에 대한 포괄적인 액세스 권한을 얻지 못합니다.

MANAGE_EXTERNAL_STORAGE 권한

파일 관리자, 백업 도구, 바이러스 백신 소프트웨어 등 광범위한 파일 액세스가 실제로 필요한 앱의 경우 Android는 MANAGE_EXTERNAL_STORAGE 권한을 제공합니다. 하지만 이 권한은 플레이 스토어를 통해 배포되는 앱에 대해 구글의 특별한 승인이 필요하며, 사용자가 간단한 대화상자가 아닌 시스템 설정을 통해 수동으로 부여해야 합니다.

출시 일정

Google은 하룻밤 사이에 범위 지정 저장소를 시행하지 않았습니다. 전환은 점진적으로 이루어졌습니다.

  • Android 10(API 29): 범위 지정 저장소가 도입되었지만 앱은 매니페스트에서 requestLegacyExternalStorage="true"를 사용하여 선택 해제할 수 있었습니다. 이를 통해 개발자는 적응할 시간을 갖게 되었습니다.
  • Android 11(API 30): API 30 이상을 대상으로 하는 앱에서는 레거시 플래그가 무시되었습니다. Play 스토어의 신규 및 업데이트된 앱에는 범위 지정 저장소가 필수가 되었습니다.
  • Android 12 이상: 세분화된 미디어 권한 및 향상된 SAF 성능을 포함하여 추가 개선이 이루어졌습니다.
  • Android 13(API 33): 광범위한 READ_EXTERNAL_STORAGE 권한은 특정 미디어 권한을 위해 더 이상 사용되지 않습니다.
  • Android 14(API 34): 부분적인 사진 및 비디오 액세스가 도입되어 사용자가 전체 미디어 라이브러리가 아닌 특정 파일에 대한 액세스 권한을 부여할 수 있습니다.

범위 지정 저장소가 사이드로드에 미치는 영향

Play 스토어 외부에서 앱을 설치하는 사용자의 경우 범위 지정 저장소는 이해할만한 몇 가지 실질적인 문제를 야기합니다.

APK 파일 다운로드 및 액세스

브라우저를 통해 APK 파일을 다운로드하면 일반적으로 다운로드 폴더에 저장됩니다. 범위 지정 저장소에서는 브라우저 앱이 해당 파일을 소유합니다. 파일 관리자와 같은 다른 앱을 사용하여 설치하려면 해당 파일 관리자에 적절한 액세스 권한이 필요합니다. 대부분의 최신 파일 관리자는 SAF를 통해 이를 올바르게 처리하지만 이전 파일 관리자는 어려움을 겪을 수 있습니다.

시스템 패키지 설치 프로그램은 파일 선택기를 통해 명시적으로 선택한 파일에 계속 액세스할 수 있으므로 APK 다운로드 및 설치의 기본 흐름이 계속 작동합니다. 그러나 직접 파일 경로 액세스에 의존하는 자동화된 설치 작업 흐름은 중단될 수 있습니다.

OBB 파일 및 게임 데이터

범위 지정 저장소가 사이드로더에 가장 많은 마찰을 일으키는 곳입니다. 많은 대형 게임에서는 /Android/obb/[package.name]/에 저장된 OBB(Opaque Binary Blob) 파일을 사용합니다. 이전 모델에서는 파일 관리자를 사용하여 OBB 파일을 올바른 디렉터리에 간단히 복사할 수 있었습니다.

범위 지정 저장소를 사용하면 /Android/obb/ 디렉터리가 제한됩니다. Android 11 이상에서는 일반 앱이 다른 앱의 OBB 디렉터리에 쓸 수 없습니다. 즉, OBB 데이터가 포함된 XAPK 파일을 다운로드하는 경우 해당 파일을 올바르게 배치하려면 설치 프로그램에서 특별한 처리가 필요합니다.

OBB 추출기와 같은 도구를 사용하면 XAPK 패키지에서 OBB 파일을 추출하는 데 도움이 될 수 있지만 최신 Android 버전에서는 해당 파일을 올바른 디렉터리에 배치하려면 MANAGE_EXTERNAL_STORAGE 권한이 있는 파일 관리자를 사용하거나 컴퓨터에서 ADB 명령을 사용해야 할 수도 있습니다.

XAPK 설치 고려 사항

XAPK 파일은 OBB 데이터와 함께 APK를 번들로 묶고 때로는 APK 구성을 분할합니다. Android 11 이상을 실행하는 기기에 이를 설치하려면 범위 지정 저장소 제한 사항을 이해하는 설치 프로그램이 필요합니다. 설치 프로그램은 MANAGE_EXTERNAL_STORAGE 권한을 보유하거나 적절한 API를 사용하여 OBB 파일을 올바른 위치에 배치해야 합니다.

이것이 XAPK 파일을 표준 APK 형식으로 변환하는 것이 유용한 이유 중 하나입니다. 독립형 APK에는 OBB 파일 배치가 필요하지 않으므로 최신 Android 버전에서 설치 프로세스가 단순화됩니다. XAPK-APK 변환기를 사용하여 XAPK 패키지에서 기본 APK를 추출할 수 있습니다.

개발자가 알아야 할 사항

Android 앱을 개발하는 경우 범위 지정 저장소를 사용하려면 파일 처리 방법을 재고해야 합니다.

  • 앱에만 필요한 모든 파일의 경우 앱별 디렉터리 사용입니다. 여기에는 권한이 필요하지 않으며 제거 시 자동으로 정리됩니다.
  • 다른 앱에 표시되고 제거 후에도 유지되어야 하는 사진, 비디오 및 오디오용 미디어스토어 사용입니다.
  • 앱이 사용자가 선택한 문서 또는 디렉터리와 작동해야 하는 경우 SAF 사용.
  • 하드코딩된 파일 경로를 피하세요. /sdcard/MyApp/와 같은 경로는 더 이상 신뢰할 수 없습니다. 대신 Context.getExternalFilesDir()를 사용하세요.
  • 여러 API 수준에서 테스트합니다. 동작은 Android 10, 11, 13, 14에서 크게 다릅니다.

마이그레이션 전략

앱이 이전에 공유 저장소에 파일을 저장한 경우 마이그레이션 계획이 필요합니다. 권장되는 접근 방식은 업데이트 후 처음 시작할 때 기존 파일을 앱별 저장소에 복사한 다음 이전 복사본을 삭제하는 것입니다. 전환 기간 동안 레거시 플래그와 함께 Environment.getExternalStorageDirectory()를 사용하여 이전 파일을 읽은 다음 새 위치로 이동합니다.

일반적인 오해

"범위 지정 저장소는 앱이 어떤 파일에도 액세스할 수 없음을 의미합니다."

이것은 거짓입니다. 앱은 계속해서 자체 파일에 자유롭게 액세스하고, 공유 미디어 컬렉션에 기여하고, 시스템 선택기를 통해 특정 파일에 대한 액세스를 요청할 수 있습니다. 변경된 점은 앱이 더 이상 전체 파일 시스템을 자동으로 탐색할 수 없다는 것입니다.

"새 Android 버전에서는 파일 관리자가 손상되었습니다."

MANAGE_EXTERNAL_STORAGE를 요청하는 파일 관리자는 계속 작동합니다. 사용자는 설정을 통해 이 특별한 권한을 부여하기만 하면 됩니다. 가장 널리 사용되는 파일 관리자는 이미 이 요구 사항에 적응했습니다.

'범위 지정 저장소는 SD 카드에만 영향을 미칩니다.'

범위 지정 저장소는 내부 공유 저장소를 포함한 모든 공유 저장소에 적용됩니다. Android에서 '외부 저장소'라는 용어는 반드시 물리적 SD 카드일 필요는 없지만 여러 앱에 액세스할 수 있는 공유 저장소를 의미합니다.

사용자를 위한 실용적인 팁

정기적으로 앱을 사이드로드하거나 Android 기기에서 파일을 관리하는 경우 몇 가지 실용적인 권장 사항은 다음과 같습니다.

  1. MANAGE_EXTERNAL_STORAGE를 지원하는 최신 파일 관리자 사용. Solid Explorer, MiXplorer 및 Total Commander와 같은 앱은 범위 지정 저장소에 잘 적응했습니다.
  2. 권한을 신중하게 부여하세요. 파일 관리자가 "모든 파일 액세스"를 요청하면 이것이 MANAGE_EXTERNAL_STORAGE 권한이며 전체 기능에 필요하다는 점을 이해하십시오.
  3. 완고한 파일 작업에는 ADB를 사용하십시오. 파일 관리자를 통해 OBB 파일을 배치할 수 없는 경우 장치를 컴퓨터에 연결하고 adb push를 사용하면 범위 지정 저장소 제한을 완전히 우회합니다.
  4. 복잡한 패키지를 더 간단한 형식으로 변환하세요. XAPK 파일이 최신 장치에서 문제를 일으키는 경우 APK 구성 요소만 추출하는 것이 가장 저항이 적은 경로일 수 있습니다.
  5. 설치 프로그램 앱을 최신 상태로 유지하세요. 이전 버전의 XAPK 설치 프로그램은 범위 지정 저장소를 올바르게 처리하지 못할 수 있습니다.

Android 스토리지의 미래

Google은 Android가 출시될 때마다 스토리지 모델을 계속해서 개선하고 있습니다. Android 14에서는 부분적인 미디어 액세스를 도입하여 사용자가 전체 라이브러리가 아닌 앱과 특정 사진을 공유할 수 있게 했습니다. Android 15에서는 저장소 액세스 프레임워크의 성능과 유용성이 더욱 향상될 것으로 예상됩니다.

추세는 분명합니다. Android는 사용자가 각 앱에서 보고 수정할 수 있는 항목을 세밀하게 제어할 수 있는 모델로 나아가고 있습니다. 이로 인해 고급 사용자와 사이드로더에게는 약간의 마찰이 발생하지만 더 광범위한 사용자 기반에 대한 개인 정보 보호 및 보안이 크게 향상됩니다.

앱 데이터를 손상시키지 않고 범위가 지정된 저장소로 작업

범위 지정 저장소는 최근 몇 년간 Android 아키텍처의 가장 중요한 변화 중 하나를 나타냅니다. Google은 앱을 자체 샌드박스로 제한하고 더 광범위한 액세스를 위해 명시적인 사용자 동의를 요구함으로써 플랫폼의 개인정보 보호 정책을 획기적으로 개선했습니다. 앱을 사이드로드하고 파일을 수동으로 관리하는 사용자의 경우 이러한 제한 사항을 이해하면 가끔 발생하는 마찰 지점을 해결하는 데 도움이 됩니다. 그리고 개발자의 경우 범위 지정 저장소에 적응하는 것은 선택 사항이 아니라 최신 Android 개발을 위한 기본 요구 사항입니다.

APK 설치, OBB 파일 배치, 일상적인 저장소 관리 등이 모두 동일한 시스템인 범위 지정 저장소로 실행됩니다. 작동 방식을 이해하고 나면 광범위한 파일 액세스를 남용할 수 있는 앱의 영향을 받는 대신 장치를 제어할 수 있는 사람은 바로 귀하입니다.

Mst Shaefale가 설계하고 문서화함 수석 개발자 및 Android 패키지 설계자 • Android 12~15에서 검증됨

Mst Shaefale은 xapktoapk.com에서 클라이언트측 XAPK/APKS 합병, 바이너리 매니페스트 파서 및 APK v1+v2 서명 도구를 유지 관리합니다. 오래된 명령이나 OS 변경 사항을 발견하셨나요? 편집 메모를 보내세요.