[앱인벤터 블로그글] 안드로이드 10부터의 파일 경로 변경

이 글은 읽는데 약 6분이 걸립니다.

※본 글의 출처는 앱인벤터 블로그입니다.
※원본 글은 CC BY-SA 라이센스입니다.
2020년 8월 8일 evan’s Blog

요약

앱에서 파일 컴포넌트의 사용법을 변경해야 할 수 있습니다. 자세한 것은 “이것이 앱인벤터 앱에 대해 의미하는 것” 문단을 읽어보세요.

이러한 변경이 왜 필요한지 알고싶으면 계속 읽어보세요.

개요

초기 안드로이드 디바이스(그리고 일부는 현재까지도) “내부 저장소”와 “외부 저장소”가 있었습니다. 외부 저장소는 주로 “Secure Digital (또는 SD)”카드를 뜻했습니다. 물리적인 SD카드가 없는 기기는 종종 SD카드를 에뮬레이트 했습니다.

전통적으로, SD카드는 일관성을 위해 경로 “/sdcard”로 참조할 수 있습니다. 이 글에서는 SD카드(또는 에뮬레이트 된 SD카드)을 “외부 저장소”라고 부르겠습니다.

외부 저장소는 기기의 모든 앱과 공유합니다. 그래서 한 앱이 파일을 만들면, 전혀 관련없는 다른 앱이 그 파일을 읽을 수 있습니다(혹은 덮어쓰거나).

대부분의 디바이스는 “내부 저장소”나 “개인 저장소”보다 외부 저장소가 더 많습니다. 그래서 대부분의 앱들은 더 많은 저장소에 접근하기 위해 외부저장소에 파일을 저장하는 것이지, 다른 앱이 읽으라고 그곳에 저장하는것이 아닙니다.

모든 앱이 사용자의 개인정보(프라이버시)를 존중하는것은 아니기에, 이는 개인정보 문제를 일으켰습니다. 2016년 구글은 이 문제를 해결하기 위해 외부 저장소를 읽으려는 모든 앱은 READ_EXTERNAL_STORAGE 권한이 있어야하도록 했습니다. 마찬가지로 외부 저장소에 파일을 쓰려는 앱은 WRITE_EXTERNAL_STORAGE 권한이 필요합니다. 대부분의 최신 버전이 안드로이드는 사용자가 직접 이 권한을 승인하도록 요청합니다.

불행히도 대부분의 사람들은 권한을 허용하는것에 대한 사생활의 영향을 이해하지 못했고, 개인정보 문제는 여전히 존재합니다. 구글은 안드로이드 10부터 더욱 엄격한 방식의 접근으로 전환하고있습니다.

보다 엄격한 이 새로운 방식은, 각 앱이 외부 저장소의 지정된 앱별 디렉터리에 파일을 쓰는것을 포함합니다. 즉, 다른 앱들은 더이상 다른 앱이 생성한 파일을 읽거나 쓸 수 없습니다. 이로 인해, 각 앱은 기존에 저장했던 파일들에 대한 접근 권한을 상실할 수 있기에, 구글은 안드로이드 10에서는 새로운 이 제한을 잠시 비활성화 할 수 있도록 했습니다. 이것은 앱 개발자들이 현재 저장된 파일들을 새로운 공간으로 옮길 업데이트를 개발할 수 있도록 위한것입니다. 구글은 안드로이드 11에서 이 기능을 비활성화 하려합니다.

이것이 앱인벤터 앱에 대해 의미하는 것

만약 당신의 앱이 파일 컴포넌트를 사용하지 않는다면 이건 아무 문제도 되지 않습니다.

nb184 릴리즈부터 앱인벤터는 안드로이드 10을 위한것으로 설계합니다. 이는 2020년 8월 1일 현재 앱을 구글 플레이스토어에 올리기 위한 요구사항입니다. 그래서 아래에 적힌 내용은 만약 앱인벤터가 플레이스토어에 앱을 올린 사람들의 능력을 보존하고 싶었다면 MIT 앱인벤터의 선택사항이 아니었을겁니다.

앱인벤터의 파일 컴포넌트는 시스템의 파일과 상호 작용하는 주요 수단입니다. 앱인벤터에서 파일 경로는 다음과같은 3종류로 표시됩니다:
ㅤ1. 두 개의 슬래시 //로 시작하는 것은 프로젝트의 에셋(미디어)를 가리키며, 읽기만 가능합니다.
ㅤ2. 한 개의 슬래시 /로 시작하는 것은 외부 저장소 폴더를 가리키는 경로입니다. 이곳에 위치한 파일에 접근하기 위해 READ_EXTERNAL_STORAGE 또는 WRITE_EXTERNAL_STORAGE 권한이 필요합니다.
ㅤ3. 슬러시 없이 시작하는 것은 앱의 개별 데이터 디렉토리를 뜻합니다.

이 중 이번에 영향을 받게 되는 유형은 두번째, 슬래시 한개로 시작하는 경로입니다. nb184 릴리즈 전에 경로가 /hello.txt 인 파일(이 파일은 실제로 /sdcard/hello.txt 에 위치합니다)이 있다고 생각하겠습니다. 릴리즈 이후에 해당 경로는 더이상 /sdcard/hello.txt를 가르키지 않습니다. 그대신 앱별로 할당된 앱별 디렉토리의 파일을 가리킵니다.

불행히도, 이로 인해 일부 애플리케이션 개발자들은 Android 10에서 nb184 릴리즈 이전에 빌드된 애플리케이션으로 작성된 파일에 접근하지 못하게 됩니다. 우리는 갑작스러운 변화에 대해 사과합니다.이러한 상황을 완화하기 위해 앱인벤터 nb184a를 출시할 예정입니다. 이 플래그에는 파일 컴포넌트에 레거시 모드라는 새로운 플래그가 포함되며, 이 플래그가 설정되면 파일 컴포넌트가 nb184 릴리증 이전과 똑같이 작동하게 됩니다.

안드로이드 11부터 이 플래그는 구글에 의해 작동이 차단될 것이기 때문에, 개발자들은 이 플래그를 기존 경로인 /sdcard 에서 새로운 앱별 디렉터리로 파일을 복사하는데만 사용할 것을 권장합니다.

더보기

Android 10의 개인정보 보호 변경사항 | Android Developers

Android 11의 저장소 업데이트 | Android Developers

Android 저장소 사용 사례 및 권장사항 | Android Developers

범위 지정 저장소 | Android Developers

Storage Components Reference – MIT App Inventor



번역이 좀 이상해서 그런데 요약하자면 이렇습니다:

ㆍ개인정보 보호를 위해 안드로이드10부터 새 저장소 정책이 추가됐고, 안드로이드 11부터 강제된다.
ㆍ기존에는 저장공간을 모든 앱이 공유했으나 새 저장소 정책에서는 앱 별로 각자의 공간을 제공하며, 이곳의 파일은 다른 앱이 접근할 수 없습니다.
ㆍ그래서 기존의 /sdcard 식으로 저장한 파일은 11부터 자신이 만든 파일이라 할지라도 접근이 불가능합니다.
ㆍ그래서 파일 컴포넌트에 레거시 모드를 추가하였고, 이를 활성화하면 기존 방식처럼 접근 가능하니 이후 접근을 못하면 안되는 파일이 있다면 빨리 앱별 디렉터리로 이동하세요.
ㆍ이 레거시 모드는 안드로이드 11부터 사용 불가능합니다.

댓글

제목과 URL을 복사했습니다