Glion 의 안드로이드 개발노트
[Android] 앱을 지워도 데이터가 남아있는 경우(AndroidManifest allowBackup 속성) 본문
안드로이드 앱을 만드는 도중, 테스트를 위해 기존에 기기에 빌드했던 앱을 지우고, 다시 설치하여 테스트를 하려고 하였다.
앱에서는 첫 시작시 2가지정도의 사용자 데이터를 수집하고, 임의로 생성한 유저키와 데이터를 서버로 전송하여 사용자 정보를 등록한다.
이 과정은 설치 이후 첫 실행시에만 동작하게 하고, 사용자 데이터는 SharedPreference를 사용하여 기기에 저장한다.
이후 실행시에는 이 값이 저장되있는지 유무에 따라서 첫 시작 유무를 판단하게 하였다.
여기서 문제가 생겼는데, 내 테스트 기기인 GalaxyS20에서는 삭제이후 다시 빌드했을때 정상적으로 첫 시작 화면이 나왔지만,
다른 사람의 디바이스에 빌드되어있는 내 앱을 삭제하고 다시 빌드했음에도 첫 시작화면이 나오지 않고, 로그를 찍어봐도
SharedPreference 에 데이터가 저장되어 있는 상태였던 것이다. 이는 앱의 캐시 및 데이터 제거를 하고 삭제해도 동일했다.
원인은, AndroidManifest <Application> 의 allowBackup 속성이 true 로 되어있기 때문이다.
위 속성은 공식문서에서 다음과 같이 설명하고 있다.
Auto Backup for Apps automatically backs up a user's data from apps that target and run on Android 6.0 (API level 23) or higher. Android preserves app data by uploading it to the user's Google Drive, where it's protected by the user's Google account credentials. The backup is end-to-end encrypted on devices running Android 9 or higher using the device's PIN, pattern, or password. The amount of data is limited to 25 MB per user. There's no charge for storing backup data. Your app can customize the backup process or opt out by
disabling backups.
필요한 내용만 보면, 앱의 자동 백업은 Android 6.0(API 수준 23) 이상에서 타겟팅하거나 실행되는 앱의 사용자 데이터를 자동으로 백업한다. Android는 앱 데이터를 사용자의 Google Drive에 업로드하여 보존하며, 이곳의 앱 데이터는 사용자의 Google 계정 사용자 인증 정보에 따라 보호된다는 말이다.
공식문서에서는 또한 다음과 같이 설명하고 있다.
You can disable backups by setting android:allowBackup to false. You might want to do this if your app can recreate its state through some other mechanism or if your app deals with sensitive information.
앱에서 일부 다른 메커니즘을 통해 상태를 다시 생성할 수 있는 경우 또는 Android에서 백업해서는 안 되는 민감한 정보를 앱에서 다루는 경우 백업을 중지하는 것이 좋습니다.
즉, true로 했음에도 내 테스트 기기인 GalaxyS20에서 잘 됬던 이유는 난 구글드라이브 연동을 아예 시켜놓지 않았고, 다른 사람의 디바이스는 실제로 구글 드라이브 연동을 시켜놔서, 앱을 삭제해도 SharedPreference에 저장된 데이터가 백업되어있었기 때문이다.
개발시, 백업이 필요한 기능을 넣어주고자 할때는 이를 이용할 수 있겠지만, 원하지 않을 경우에는
android:allowBackup = "false"
로 해주면 이후 앱을 삭제하고 다시 빌드하면, 데이터가 남아있지 않게 된다.