hyeon.s
개발로그
hyeon.s
전체 방문자
오늘
어제
  • 분류 전체보기 (151)
    • Web 및 인프라 (1)
      • Web (1)
      • Terraform (2)
      • Docker (1)
    • Android (1)
      • 공부 (28)
      • 트러블슈팅 (12)
      • 프로젝트 개발 (10)
      • Compose (2)
      • 우테코 프리코스 (0)
    • Server (6)
      • 공부 (1)
      • Spring (5)
    • 알고리즘 (68)
      • 문제풀이 (C++,Kotlin) (54)
      • 공부 (13)
    • 디자인 (3)
      • UI (3)
    • Language (5)
      • Kotlin (5)
      • JAVA (0)
    • IT 동아리 (8)
      • UMC 3기 (Android) (7)
      • Sopt 32기 (Android) (1)

Github

글쓰기 / 관리자
hELLO · Designed By 정상우.
hyeon.s
Android/트러블슈팅

[Android/트러블슈팅] 앱을 삭제했는데 데이터가 남아있다고요?

[Android/트러블슈팅] 앱을 삭제했는데 데이터가 남아있다고요?
Android/트러블슈팅

[Android/트러블슈팅] 앱을 삭제했는데 데이터가 남아있다고요?

2023. 9. 11. 18:04
728x90

들어가기 전

릴리즈 apk로 테스트를 하다가 처음 앱을 설치하고 실행하면 로그인 및 다른 기능들이 정말 잘 작동되는데, 앱을 삭제했다가 다시 깔아서 테스트를 하면 앱이 터지는 문제가 발생하였다. 이 과정에서 겪은 트러블 슈팅과 해결 방법을 작성해보도록 하겠다.

엄빠도 어렸다 릴리즈를 준비하면서 릴리즈 apk로 테스트를 계속 진행했는데, 첫 설치 후 앱을 실행하면 정말 잘 작동하였다. 문제였던 카카로 로그인도 잘 되고, 여러 기능들에 문제가 없었다. 그러나 앱을 삭제하고 다시 깔아보니 실행과 동시에 앱이 터지는 문제가 발생했다.

무엇이 문제일까?

1. 디버그 apk 에서는 괜찮았으니까, 코드 중에 buildConfig.DEBUG로 설정 한 부분이 있어서, 해당 부분이 릴리즈 apk에서 작동하지 못해서 생긴 문제 아닐까? 

2. sharedPreference에 문제가 있는 것 같다.

이 두가지 의견이 있었는데, 바로 2번 sharedPreference의 문제였다. 

이를 확인 한 방법은 삭제 하고 다시 깔았을 때, 캐시도 같이 삭제하니 앱이 잘 실행되는 것이였다. 
캐시를 삭제 해야 잘 실행된다는 것은 현재 저장소에 문제가 있다고 추측할 수 있었다. 

그리고 에러 description을 자세히 보니 이런 내용이 있었다.

com.google.crypto.tink.shaded.protobuf.InvalidProtocolBufferException: Protocol message contained an invalid tag (zero).

SharedPreference의 문제

현재 엄빠도 어렸다 서비스에서는 카카오 로그인을 한번 한 후 다시 앱을 들어오면, sharedPreference를 통해서 자동로그인이 된다.

이 때 사용한 sharedPreference는 EncryptedSharedPreferences이다. 
EncryptedSharedPreferences는 간단히 말하자면 암호화된 sharedpreference 이다. 

기존 sharedpreference는 소규모의 데이터를 앱 안 xml파일로 간편하게 저장할 수 있는 저장소로 xml 내용을 보면 key와 value를 다 볼 수 있다.

하지만 앱의 데이터를 이 같이 쉽게 열어보는게 좋지 않은 것 같아 구글에서는 암호화를 할 수 있는 security 라이브러리를 제공하고 있다. 이 라이브러리를 추가하면 sharedpreference 가 아닌 encryptedsharedpreference로 작성하면되고, 암호화를 할 수 있다.

그래서 EncryptedSharedPreferences 사용의 문제냐? 그건 아니다. 원인은 바로 이 포스팅의 제목처럼 앱을 삭제해도 데이터가 복구되는 문제 때문이였다!

앱을 삭제했는데 임시저정소 데이터가 남아있다.

이제껏 알고있는 바로는 앱을 삭제하면 sharedpreference (저장소)의 데이터도 삭제되는 것으로 알고 있었는데, 최신 기종에서 이 데이터가 남아있는 즉 복구되는 경우가 있다고 한다.

그 원인은 바로 Backup Manager 때문이였다. 이는 따로 설정하지 않으면 자동백업을 true로 진행한다.
이를 원치 않을경우 manifest에서 android:allowBackup = false로 설정하면 된다.

true로 되어있을 경우, 앱을 삭제해도 앱 내 저장되어있던 데이터가 다시 되살아난다.

그래서 백업과 EncryptedSharedPreferences랑 어떤 연관이?

EncryptedSharedPreferences를 소개하면서 말했던 Security 라이브러리는 android keystore system을 이용해 마스터키를 만들었다. 따라서 키를 앱 내부가 아닌, 시스템만이 접근 가능한 컨테이너에 저장하도록 하였다.

이런 상황에서 allowBackup=true로 설정했다면? keystore를 백업할 수 없으므로 암호화된 데이터가 복원되어도 이를 해독할 수가 없는것이다. 따라서 자동로그인을 위해서 사용한 sharedpreference에 값을 확인이 불가능하니 해당 에러가 발생하는 것이다.

이를 컴퓨터 안드로이드 스튜디오에서 돌렸을 경우에는 keystore를 파악할 수 있기 때문에 문제가 없었지만, 실제 릴리즈처럼 apk 파일을 이용해 모바일 기기로 실행시키면 문제가 발생하는 것이다.

해결방법

manifest에 application 내에 두 속성을 false로 바꿔주면된다.

  android:allowBackup="false"
  android:fullBackupContent="false"

이렇게 변경하면 apk 파일로 실행해도 더이상 에러가 발생하지 않는다!

마치며

카카오 로그인 api를 수정하니 또 다른 에러가 떠서 멘붕이 왔었는데, 이 역시 apk를 추출해서 모바일 기기로 돌렸을 때 확인할 수 있는 에러였다. 이제껏 프로젝트를 에뮬레이터에서만 돌리고, apk 파일 추출하고 릴리즈까지는 도달하지 못하다보니 새롭게 경험하는 트러블슈팅이 많았다. 릴리즈가 없었다면 겪지 못하고 알지 못했던 지식들이라 더욱 값진 것 같다. 이 포스팅 역시 해당 에러를 겪은 개발자들에게 도움이 되길 바란다!

728x90
저작자표시 (새창열림)

'Android > 트러블슈팅' 카테고리의 다른 글

[Android] WorkManager를 활용해 주기적인 백그라운드 작업 실행하기 (15min ver)  (0) 2024.07.23
[Android/트러블슈팅] 구글 플레이스토어 키스토어 분실 재설정 방법  (2) 2024.01.13
[Android/트러블슈팅] Keystore 정보 확인하는 법  (0) 2023.09.07
[Android/트러블 슈팅] Multiple Gradle daemons might be spawned because the Gradle JDK and JAVA_HOME locations are different. / 안드로이드 스튜디오 자동완성 에러 안뜨는 오류  (0) 2023.09.05
[Android/트러블슈팅] Kakao Login API Apk 추출 시 로그인 안되는 문제/KeyHash 오류  (0) 2023.09.03
'Android/트러블슈팅' 카테고리의 다른 글
  • [Android] WorkManager를 활용해 주기적인 백그라운드 작업 실행하기 (15min ver)
  • [Android/트러블슈팅] 구글 플레이스토어 키스토어 분실 재설정 방법
  • [Android/트러블슈팅] Keystore 정보 확인하는 법
  • [Android/트러블 슈팅] Multiple Gradle daemons might be spawned because the Gradle JDK and JAVA_HOME locations are different. / 안드로이드 스튜디오 자동완성 에러 안뜨는 오류
hyeon.s
hyeon.s
이유있는 코드를 짜자

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.