내 앱의 SharedPreferences에 사용자 설정을 저장했습니다. Google Play 스토어를 통해 앱을 새 버전의 앱으로 업데이트하면 SharedPreferences는 어떻게됩니까?
SharedPrefernces는 업데이트 후에도 여전히 존재합니까 아니면 삭제됩니까?
지금까지 웹이나 Stackoverflow에서 답변을 찾지 못했습니다 (잘못된 키워드로 검색해도 될까요?).
이 프로세스를 설명하는 링크를 알려 주시겠습니까?
편집 :
한편 나는 다른 대답도 발견했습니다 : 업데이트 / 제거시 SharedPreferences 동작
편집 2 :
내가 처음이 질문을 할 때 꽤 지난 이후로 최근에 Android 6.0 (API 23) 이후 Google에서 설명한대로 자동 백업 기능을 사용 하여 공유 환경 설정 을 보호 할 수 있음을 알게 되었습니다 . 단지를 추가 allowBackup="true"
하여에 AndroidManifest.xml
파일.
답변
크리스티안 여기 말한다 : 사용자가 업데이트를 설치할 때 응용 프로그램 데이터는 유지됩니다.
단 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가 삭제됩니다.
시장 복사 방지가 업데이트 후 파일 액세스를 완전히 차단합니다
누군가 앱 업데이트 프로세스를 설명 할 수 있습니까?
답변
4 시간 이상 디버깅 한 후 직렬화하여 모델을 문자열로 저장하고 있음을 알았습니다. 직렬화 가능한 클래스에는 serialVersionUID 라는 이름의 고유 ID가
있으며 이는 런타임에 기본적으로 설정되며 클래스 이름, 인터페이스 및 변수 이름으로도 계산됩니다. 모델 클래스를 변경하고 변수를 추가 한 다음 앱을 업데이트했음을 알았습니다. 이제 클래스가 변경되어 새로운 serialVersionUID 가 설정되어 update시 문자열을 역 직렬화 할 수없고 모델을 생성 할 수 없었고 java.io.InvalidClassException을 제공했습니다.
이 문제를 방지하기 위해 명시 적으로 serialVersionUID를 설정합니다.
static final long serialVersionUID = 42L;
답변
Google Play를 통해 마지막으로 애플리케이션을 업데이트했을 때 sharedPreferences가 영향을받지 않은 것 같습니다.
나는 그것들을 사용하여 자동으로 로그인하고 업데이트 후 그렇게했습니다.
한 달 전 이었기 때문에 내 기억이 흐려질 수 있으므로 다른 사람들의 의견도 듣는 것이 좋습니다.