Android 앱은 제거 및 재설치 후 데이터를 기억합니다


194

4.1 이상의 모든 버전을 대상으로하는 Android 앱을 개발하는 동안 앱을 제거했다가 다시 설치해도 데이터가 지워지지 않는 것으로 나타났습니다.

응용 프로그램은 첫 번째 화면에 묻는 세부 정보를 저장하도록 설계되었습니다. OS 버전 4.4.4에서 제거했다가 다시 설치 한 후 앱은 사용자에게 데이터를 입력하라는 메시지를 표시합니다. 이는 정상입니다. 그러나 버전 6.0에서 동일한 설치 / 제거 순서는 원래 입력 된 데이터를 다시 가져옵니다.

/data/data/my package folder제거 후 데이터베이스가 사라지고 실제로 제거 중에 폴더가 삭제 되는지 확인하기 위해 방문 했습니다.

티타늄 백업을 통해 설정 페이지를 방문하여 앱을 삭제하려고했는데 결과가 동일합니다. 기기는 루팅 된 Nexus 5 (v6.0)입니다.

이 이상한 행동의 이유는 무엇입니까?

답변:


329

Android 6에는 자동 백업이 있기 때문입니다. 당신은 조정이 필요 android:allowBackup하고 android:fullBackupContent매니페스트에 <application>당신이 당신의 데이터를 백업하지 않으려면 태그 또는 포함 할 경우 또는 일부 리소스를 제외합니다. 버그가 아닙니다.

Android의 자동 백업에 대한 자세한 내용은 여기를 참조하십시오 .


28
이것은 정답이며 나에게도 효과가 있습니다. (동일한 문제가 있습니다.)이 동작을 피하려면 android : allowBackup = "false"android : fullBackupContent = "false" 를 manifest.xml에 입력해야합니다.
frusso

33
만일 당신의 일부 궁금해, 안드로이드 : allowBackup 및 안드로이드 : fullBackupContent는 <응용 프로그램 />에 추가하는 속성입니다
잭 '

2
문서에서 : android : fullBackupContent는 백업 옵션이 포함 된 XML 파일을 가리 킵니다. 기본적으로 대부분의 파일이 백업됩니다. 이것을 "false"로 설정해도 오류가 발생하지는 않지만 설정이 잘못되었다고 생각합니다.
bajicdusko

3
이전 버전과 동기화되지 않아서 성가신 것처럼 백업을 수행하기 위해 기본 동작을 유지 한 이유를 잘 모르겠습니다. 그것을 원하는 사람들은 그것을 켤 수 있습니다.
Atul

7
누구나 백업을 삭제하는 방법을 알고 있습니까?
1800 정보

31

greywolf82의 답변은 정확하지만 여기에 정보를 추가하고 싶습니다.

Xamarin을 사용하여 Android 앱을 개발할 때 Visual Studio에서 앱을 다시 시작할 때마다 데이터가 몇 개월 전의 데이터로 되돌아갑니다. VS에서 단순히 중지했다가 다시 실행하는지 또는 앱을 완전히 제거한 다음 다시 설치했는지는 중요하지 않습니다.

또한 앱에 백업을 저장하도록 명시 적으로 지시하지 않았다는 점도 주목할 가치가 있습니다.

또한 백업은 Visual Studio에서 시작할 때 최신 데이터를 덮어 쓰는 것처럼 보였으며 앱의 릴리스 빌드를 사용하고 백업으로 새 데이터를 덮어 쓴 사용자에 대한 보고서가 있습니다.

백업 및 복원이 언제 발생하는지 정확히 알지 못하므로이 기능은 문제를 일으키는 것 같습니다.

다음 XML과 같이 AndroidManifest를 수정했습니다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.XXXXXXX" android:versionName="8.0.0" android:installLocation="auto" android:versionCode="439">
    <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="24" />
    <application 
               android:label="@string/appName" 
               android:icon="@drawable/icon_small" 
               android:installLocation="internalOnly" 
               android:largeHeap="true"
               android:allowBackup="false"
               android:fullBackupOnly="false"
               />
...
</manifest>

값을 명시 적으로 false로 설정하면 모든 것이 작동하는 것 같습니다. 나는 이것이 옵트 인 기능 일 것으로 기대하지만 ... 어느 쪽이든 값을 지정하지 않는 앱의 경우 기본적으로 켜져있는 것처럼 보입니다.


감사. 나는 같은 문제가 있었다.
Hadi Fooladi Talari

15

장치의 백업 및 재설정 설정을 확인하고 자동 복원을 해제해야합니다 (응용 프로그램을 재설치 할 때 백업 된 설정 및 데이터가 복원됩니다).

자동 백업을 끄는 것은 자동 복원과 다릅니다. 응용 프로그램에 자동 백업을 설정하는 것이 도움이 될 것이라고 생각되면 그렇게하십시오. 그러나 이것이 장치의 자동 복원 기능이 켜져 있음을 모르는 최종 사용자를 만들 것이라고 생각되면 자유롭게 끄십시오.

필자의 경우 allowBackup 기능을 해제했지만 이미 Cloud에 이전 버전의 백업이 있었기 때문에 계속 복구 중입니다.

Android 6.0에서 Samsung 장치에 대한 참조로 이미지를 참조하십시오. 다른 장치와 버전은 화면이 다를 수 있습니다. 아래 이미지를 참조하십시오.

백업 및 재설정에서 자동 복원 설정


나는 같은 문제가 있는데, 내 앱은 켜져있을 때 소수의 사용자를 위해 데이터를 백업했습니다. 동기화 된 데이터를 지우거나 버릴 가능성이 있습니까?
Aditya Chauhan

5

최근에 이러한 기능을 활용해야했고 설명서를 찾을 수 있었으며 광범위한 테스트를 통해이를 추론 할 수있었습니다.

Android : allowbackup-기기의 로컬 앱 데이터를 백업합니다.

Android : fullBackupContent-Google의 백업 복원 API와 함께 사용되며 xml 파일을 통해 정확하게 백업 할 항목을 지정하고 프로세스를 추가로 제어하기 위해 구현할 수있는 BackupManager 클래스를 제어 할 수 있습니다.

그러나 설명서에는 장치가 복원되고 앱 데이터 복원 프로세스가 트리거 될 때만 복원이 발생한다고 기술되어 있으며 테스트를 통해 확인했습니다. 또는 앱이 adb를 통해 사이드로드 될 때 복원됩니다. 이는 Android Studio를 통해 기기에서 테스트 또는 디버그하기 위해 앱을 실행할 때 수행하는 작업입니다. android : allowbackup을 설정했지만 Google API 코드로 android : fullBackupContent를 구성하지 않으면 앱 데이터가 로컬에만 저장되는 반면, 올바르게 구성한 경우 앱이 백업되고 새 기기에 앱이 있으면 데이터가 클라우드에 저장되어 새 장치에서 복원 될 수 있습니다.


3

매니페스트 파일의 응용 프로그램 태그 아래에 android : allowBackup = "false"를 추가하면 문제가 해결되었습니다.

다음 은 자동 백업으로 사용자 데이터 백업에 대한 Android 설명서입니다.


2

manifiest.xml에서 android : allowBackup = "true"를 android : allowBackup = "false"로 변경하십시오. 작동합니다.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    <application
        android:allowBackup="false"
        android:icon="@mipmap/app_icon"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
</manifest>

2

이것에 덧붙여서, 우리는 안드로이드 9 (HMD Nokia 디바이스)에서 인터페이스와 adb를 통해 앱을 삭제 한 후에도 자산이 보관되어 있음을 발견했습니다.

추가의 대답 :

android:allowBackup="false" android:fullBackupOnly="false"

분명히 이것은 새로운 답변이 아니라 우리와 같은 입장에있는 사람들을위한 관찰입니다.


2

Android 10을 타겟팅하는 경우 android:hasFragileUserData="true"응용 프로그램 태그를AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
  <application
    android:name=".MyApplication"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    android:allowBackup="true"
    android:hasFragileUserData="true">

    .....

     </application>

 </manifest>

android : hasFragileUserData는 새로운 매니페스트 설정입니다 (에 추측하고 있습니다). "true 인 경우 사용자에게 앱 데이터를 제거 할 때 확인하라는 메시지가 표시됩니다". 이것은 악용으로 잘 보이지만 일부 앱에서 유용 할 수있는 곳을 알 수 있습니다.

참조 https://commonsware.com/blog/2019/06/06/random-musings-q-beta-4.html를

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