Android 앱 업데이트시 SharedPreferences는 어떻게 되나요?


84

내 앱의 SharedPreferences에 사용자 설정을 저장했습니다. Google Play 스토어를 통해 앱을 새 버전의 앱으로 업데이트하면 SharedPreferences는 어떻게됩니까?

SharedPrefernces는 업데이트 후에도 여전히 존재합니까 아니면 삭제됩니까?

지금까지 웹이나 Stackoverflow에서 답변을 찾지 못했습니다 (잘못된 키워드로 검색해도 될까요?).

이 프로세스를 설명하는 링크를 알려 주시겠습니까?

편집 : 한편 나는 다른 대답도 발견했습니다 : 업데이트 / 제거시 SharedPreferences 동작

편집 2 : 내가 처음이 질문을 할 때 꽤 지난 이후로 최근에 Android 6.0 (API 23) 이후 Google에서 설명한대로 자동 백업 기능을 사용 하여 공유 환경 설정 을 보호 할 수 있음을 알게 되었습니다 . 단지를 추가 allowBackup="true"하여에 AndroidManifest.xml파일.

답변:


70

크리스티안 여기 말한다 : 사용자가 업데이트를 설치할 때 응용 프로그램 데이터는 유지됩니다.

package name, 이전 앱의 업데이트 와 동일해야합니다 .

EboMike의 Android 사용자에게 앱 업데이트로 인해 이전 앱 버전의 데이터가 손실 될 수 있다고 경고합니까? 말한다 :

솔직히 말해서 업그레이드로 인한 데이터 손실은 용납 할 수 없습니다.

편집 :

일반적으로 SharedPreferences (및 기타 사용자 데이터)는 업데이트 프로세스 동안 유지되지만 때로는 " 알 수없는 "문제로 인해 데이터가 손실 될 수 있으며 제어 할 수 없는 것 같습니다. 따라서 SharedPreferences가 유지 될 것이라고 간단히 믿을 수 있습니다 ( 여기 참조 ).

따라서 업그레이드 진행 중에 사용자 데이터를 지우지 않으려면 기본 데이터를 외부 저장소 (SD 카드 또는 내부, 이동식 저장 장치와 같은 이동식 저장 매체 일 수 있음)에 저장해야합니다. 또는 최소한 사용자가 업그레이드하기 전에 데이터를 백업 할 수 있도록 보관하십시오. 그런 다음 (업그레이드 된) 앱을 처음 실행할 때 외부 저장소에 백업 파일이 있는지 확인하십시오.

앱을 업그레이드 할 때 어떤 일이 일어나야 하는지 알고 싶다면 ? , 나는 이것에 대한 좋은 설명이 없었습니다 Android Security. Application signing,, copy protection그리고 다른 주제 들과 복잡하고 상대적입니다 . 위의 필드에서 앱의 상태를 변경하면 다른 결과가 발생한다는 것을 의미합니다.
예를 들어 CHANGED COPY PROTECTION FROM ON to OFF OR OFF to ON, 귀하의 앱이 업데이트되지만 모든 공유 기본 설정이 손실되고 파일 액세스가 불가능하고 ....
조건에주의해야하지만 being considered이전 앱에 대한 업데이트로 새 앱이 발생합니다 ( 변경할 수없는 항목 참조 ).

또한 코드에주의를 기울여야합니다. 데이터베이스의 데이터가 삭제 될 수 있습니다 ( 사전로드 된 SQLite로 앱 업데이트 참조 ).

그러나 궁극적으로 조심한다면 다음과 같이 말할 수 있습니다.

업데이트 프로세스는 apk 파일 (예 : 드로어 블 등) 만 대체하고 데이터베이스, 공유 기본 설정 및 런타임에 생성 된 기타 파일을 변경하지 않습니다 (아마도이 ​​경우에는 새 앱이 이전 앱의 UID와 동일한 UID).

자세한 내용은 다음 페이지를 참조하십시오.

도움!? 시장에서 애플리케이션을 업데이트하면 저장된 SharedPreferences가 삭제됩니다.
시장 복사 방지가 업데이트 후 파일 액세스를 완전히 차단합니다
누군가 앱 업데이트 프로세스를 설명 할 수 있습니까?


고마워요, SharedPreferences가 괜찮아 유지되어야하는 것 같습니다. 그러나이 과정에 대한 공식적인 설명이 없습니까?
Bruno Bieri 2012 년

@viperbone 어떤 프로세스를 수행합니까? 공유 환경 설정을 명확히합니까? 또는 앱을 업그레이드합니까?
hasanghaforian

앱 업그레이드 프로세스. 앱을 업그레이드 할 때해야 할 일
Bruno Bieri 2012 년

@viperbone 내 대답을 다시 참조하십시오. 자세한 내용을 추가했습니다.
hasanghaforian 2013 년

또 다른 참고 사항 : 공유 기본 설정 이름이 업그레이드간에 동일한 지 확인하십시오! 버전간에 이름이 다르기 때문에 새 버전은 이전 버전에서 저장된 환경 설정을 선택하지 않았습니다.이 문제를 디버그하기 위해 아침 전체를 낭비했습니다 ... :-(
henry000dev

7

4 시간 이상 디버깅 한 후 직렬화하여 모델을 문자열로 저장하고 있음을 알았습니다. 직렬화 가능한 클래스에는 serialVersionUID 라는 이름의 고유 ID가 있으며 이는 런타임에 기본적으로 설정되며 클래스 이름, 인터페이스 및 변수 이름으로도 계산됩니다. 모델 클래스를 변경하고 변수를 추가 한 다음 앱을 업데이트했음을 알았습니다. 이제 클래스가 변경되어 새로운 serialVersionUID 가 설정되어 update시 문자열을 역 직렬화 할 수없고 모델을 생성 할 수 없었고 java.io.InvalidClassException을 제공했습니다.

이 문제를 방지하기 위해 명시 적으로 serialVersionUID를 설정합니다.

static final long serialVersionUID = 42L;

1
그러나 변경 사항이 호환되는지 확인하십시오. 그렇지 않으면 이상한 버그가 발생할 수 있습니다.
mjaggard

5

Google Play를 통해 마지막으로 애플리케이션을 업데이트했을 때 sharedPreferences가 영향을받지 않은 것 같습니다.
나는 그것들을 사용하여 자동으로 로그인하고 업데이트 후 그렇게했습니다.
한 달 전 이었기 때문에 내 기억이 흐려질 수 있으므로 다른 사람들의 의견도 듣는 것이 좋습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.