programing

Android 앱이 제거했다가 다시 설치한 후 데이터를 기억합니다.

magicmemo 2023. 7. 30. 17:33
반응형

Android 앱이 제거했다가 다시 설치한 후 데이터를 기억합니다.

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

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

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

Titanium Backup을 통해 설정 페이지를 방문하여 앱을 삭제하려고 했는데 결과는 동일합니다.디바이스는 v6.0을 실행하는 Nexus 5를 기반으로 합니다.

이 이상한 행동의 이유는 무엇일까요?

안드로이드 6에는 자동 백업 기능이 있기 때문입니다.튜닝이 필요합니다.android:allowBackup그리고.android:fullBackupContent의 매니페스토에서.<application>데이터를 백업하지 않으려는 경우 또는 일부 리소스를 포함하거나 제외하려는 경우 태그를 지정합니다.벌레가 아닙니다.

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

Greywolf82의 대답은 맞지만 여기에 정보를 추가하고 싶습니다.

Android 앱을 개발할 때(Xamarin 사용) Visual Studio에서 앱을 다시 시작할 때마다 데이터가 몇 달 전의 데이터로 되돌아갑니다.VS에서 단순히 중지했다가 다시 실행하거나, 앱을 완전히 제거하고 다시 설치하는 것은 문제가 되지 않았습니다.

또한 애플리케이션에 백업을 저장하도록 명시적으로 지시한 적이 없습니다.

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

백업 및 복원이 언제 발생하는지 정확히 알 수 없기 때문에 이 기능은 문제만 일으키는 것 같습니다.

다음 두 줄을 추가하여 Android Manifest를 수정했습니다.

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

추가한 Android Manifest에는 다음과 같은 xml이 포함되어 있습니다.

<?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로 설정하면 모든 것이 작동하는 것 같습니다.이 기능이 옵트인 기능이 될 것으로 예상합니다만...값을 지정하지 않은 앱의 경우 기본적으로 켜져 있을 수 있습니다.

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

자동 백업 해제는 자동 복원과 다릅니다.응용프로그램에 대해 자동 백업을 설정하는 것이 도움이 될 것 같으면 자동 백업을 설정합니다.그러나 이렇게 하면 장치의 자동 복원 기능이 켜져 있는지 모르는 최종 사용자가 안심하고 사용할 수 있습니다.

저의 경우 백업 허용 기능을 해제했지만 클라우드에 이전 버전의 백업이 이미 있기 때문에 계속 복원됩니다.

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

백업 및 재설정의 자동 복원 설정

여기에 더해, 우리는 안드로이드 9(HMD Nokia 장치)에서 인터페이스와 애드비를 통해 앱을 삭제한 후에도 자산이 보유되어 있다는 것을 발견했습니다.

추가하면 다음과 같은 이점이 있습니다.

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

분명히, 이것은 새로운 대답이 아니라 우리와 같은 입장에 있었던 사람들에 대한 관찰입니다.

최근에는 이러한 기능을 활용해야 했고 설명서를 찾을 수 있었으며 광범위한 테스트를 통해 다음과 같은 이점을 얻을 수 있었습니다.

Android: allow backup(백업 허용) - 로컬 앱 데이터가 위치한 장치에 백업됩니다.

Android:fullBackupContent - Google의 백업 복원 API와 함께 사용되며, xml 파일을 통해 제어할 수 있어 백업할 항목을 지정할 수 있을 뿐만 아니라 프로세스에 대한 추가 제어를 위해 구현할 수 있는 BackupManager 클래스도 지정할 수 있습니다.

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

만약 당신이 안드로이드 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>

안드로이드: hasFragileUserData는 새로운 매니페스트 설정입니다(아마도)."참이면 제거 시 앱의 데이터를 유지하라는 메시지가 사용자에게 표시됩니다.이것은 남용하기에 무르익은 것처럼 보이지만, 저는 일부 앱에 유용한 부분을 볼 수 있습니다.

https://commonsware.com/blog/2019/06/06/random-musings-q-beta-4.html 을 참조하십시오.

Android:allowBackup="false"를 매니페스트 파일의 응용 프로그램 태그에 추가하여 문제를 해결했습니다.

다음은 자동 백업을 사용한 사용자 데이터 백업을 위한 Android 설명서입니다.

이 답변에는 기존의 여러 답변이 요약되어 있으며, 소개 중인 Android 12의 최신 세부 정보가 포함되어 있으며, 장치에서 생성된 기존 앱 백업 데이터를 지우는 방법이 포함되어 있습니다.

자세한 내용은 https://developer.android.com/guide/topics/data/autobackup#EnablingAutoBackup https://developer.android.com/about/versions/12/behavior-changes-12#backup-restore https://developer.android.com/guide/topics/manifest/application-element http://android-doc.github.io/preview/backup/index.html 을 참조하십시오(장치에서 Google Drive에 저장된 기존 앱 백업 데이터를 지우는 방법:설정 > 백업 > Google One 백업을 껐다가 다시 켠 다음 제거/재설치를 다시 시도합니다.)

참고로, 다른 답변 중 일부는 다음과 같이 제안합니다.android:fullBackupContent="false"그러나 이는 현재 true/false가 아닌 특정 형식의 xml 파일을 지정하기 위한 것이기 때문에 더 이상 올바르지 않은 것 같습니다.

이 속성은 다음과<application>Android 자동 백업 기능을 비활성화하거나 세부 사항을 구성할 수 있습니다.

<application
tools:replace="android:label, android:icon, android:allowBackup, '...any other attribute you want to override with a value you set in this file for in case dependencies set them to other values...'"
'...your other attributes set here like android:label and android:icon...'
android:allowBackup="false" '...default is true, and setting this false prevents data backups of any kind (except device to device transfers if your app targets Android 11 (API 30) or higher)...'
android:fullBackupContent="@xml/backup_rules_android_11_and_below" '...optional, for Android 11 and below, referring to a file res/xml/backup_rules_android_11_and_below.xml you need to create...'
android:dataExtractionRules="@xml/backup_rules_android_12_and_above" '...optional, for Android 12 and above (fullBackupContent still needed along with this, assuming you support Android 11 and below), referring to a file res/xml/backup_rules_android_12_and_above.xml you need to create, with a slightly different required xml format...'
android:fullBackupOnly="false" '...optional, and default is false, but if set to true this field description says it enables auto backup on Android 6 (API 23) devices or higher (I am not sure how this matters compared to the more broadly reaching allowBackup)...'
android:hasFragileUserData="false" '...optional, and default is false, but if set to true this field description says it gives the user an option when they uninstall the app whether or not to backup their app data...'
>
'...contents of application element...'
</application>

<application>변경 사항은 향후 앱 백업 생성(또는 생성 부족)에만 영향을 미칩니다. 기존 앱 백업 데이터는 여전히 존재하며 덮어쓰거나 삭제될 때까지 사용됩니다(장치에 대한 데이터 삭제 지침은 위 참조).

Android:allowBackup="true"를 Android:allowBackup="false"로 manifies.xml에서 변경합니다.효과가 있을 겁니다.

<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>

다음과 같이 추가했습니다.

tools:replace="android:allowBackup"

사용된 구성 요소에서 동일한 옵션을 재정의함

언급URL : https://stackoverflow.com/questions/33169618/an-android-app-remembers-its-data-after-uninstall-and-reinstall

반응형