एक एंड्रॉइड ऐप अपने डेटा को अनइंस्टॉल और रीइंस्टॉल करने के बाद याद रखता है


192

4.1 से ऊपर के सभी संस्करणों को लक्षित करने वाले एक एंड्रॉइड ऐप को विकसित करते समय, मैंने देखा कि मेरे ऐप को अनइंस्टॉल करना और इसे फिर से इंस्टॉल करना इसके डेटा को साफ़ नहीं करता है।

ऐप को उन विवरणों को संग्रहीत करने के लिए डिज़ाइन किया गया है जो यह अपनी पहली स्क्रीन में पूछता है। ओएस संस्करण 4.4.4 में फिर से अनइंस्टॉल और इंस्टॉल करने के बाद, ऐप उपयोगकर्ता को डेटा भरने के लिए संकेत देता है, जो सामान्य है। हालांकि संस्करण 6.0 में एक ही इंस्टॉल / अनइंस्टॉल अनुक्रम अनुक्रम डेटा को मूल रूप से वापस लाता है।

मैंने यह /data/data/my package folderदेखने के लिए डेटाबेस को अनइंस्टॉल करने के बाद चला गया है और वास्तव में उस फ़ोल्डर को अनइंस्टॉल करने के दौरान हटा दिया गया है, यह सुनिश्चित करने का प्रयास किया ।

मैंने टाइटेनियम बैकअप के माध्यम से सेटिंग पृष्ठ पर जाकर ऐप को हटाने की कोशिश की और परिणाम समान हैं। डिवाइस नेक्सस 5 को v6.0 रनिंग रूट किया गया है।

इस अजीब व्यवहार का कारण क्या हो सकता है?

जवाबों:


325

ऐसा इसलिए है क्योंकि Android 6 में स्वचालित बैकअप है। आप धुन करने की जरूरत है android:allowBackupऔर android:fullBackupContentअपने मेनिफ़ेस्ट में <application>टैग अगर आप अपने डेटा का बैकअप नहीं चाहते हैं या कुछ संसाधनों को बाहर करता है, तो आप शामिल करना चाहते हैं या। यह बग नहीं है।

ऑटो-बैकअप Android पर के बारे में अधिक यहाँ


27
यह सही उत्तर है और यह मेरे लिए काम करता है (मुझे भी यही समस्या थी) इस व्यवहार से बचने के लिए एंड्रॉइड डालना आवश्यक है : allowBackup = "false" और android: fullBackupContent = "false" in मैनिफ़ेस्ट।
xml

32
अगर आप में से कुछ को आश्चर्य होता है, तो android: allowBackup और android: fullBackupContent में <application />
Jack '

2
प्रलेखन से: android: fullBackupContent XML फ़ाइल में पॉइंट करता है जिसमें बैकअप विकल्प होते हैं। डिफ़ॉल्ट रूप से, अधिकांश फाइलें बैकअप होती हैं। हालाँकि यह "झूठी" सेटिंग किसी भी त्रुटि को ट्रिगर नहीं करता है, मुझे लगता है कि इसे सेट करना गलत है।
बाजीकुसको

3
निश्चित नहीं है कि उन्होंने बैकअप लेने के लिए डिफ़ॉल्ट व्यवहार क्यों रखा, क्योंकि व्यवहार पिछले संस्करणों के साथ तालमेल नहीं है इसलिए कष्टप्रद हो जाता है। जो लोग चाहते हैं, वे इसे चालू कर सकते हैं।
अतुल

7
किसी को पता है कि बैकअप कैसे हटाएं?
1800 की सूचना

29

greywolf82 का जवाब सही है लेकिन मैं इसमें कुछ जानकारी जोड़ना चाहता हूं।

अपने एंड्रॉइड ऐप (Xamarin का उपयोग करते हुए) को विकसित करते समय, मैंने देखा कि जब भी मैं विजुअल स्टूडियो से ऐप को दोबारा लॉन्च करूंगा, मेरा डेटा कुछ महीने पहले के डेटा पर वापस आ जाएगा। इससे कोई फर्क नहीं पड़ता कि मैंने बस वीएस से रोका और फिर से चलाया, या अगर मैंने ऐप को पूरी तरह से अनइंस्टॉल किया और इसे फिर से इंस्टॉल किया।

यह भी ध्यान देने योग्य है कि हमने ऐप को बैकअप स्टोर करने के लिए स्पष्ट रूप से कभी नहीं कहा।

दृश्य स्टूडियो से लॉन्च करते समय बैकअप नए डेटा को अधिलेखित करने के लिए भी लग रहा था, और हमारे पास हमारे ऐप के रिलीज़ बिल्ड का उपयोग करने वाले उपयोगकर्ताओं की रिपोर्ट है और बैकअप द्वारा नए डेटा को अधिलेखित भी किया जा रहा है।

चूँकि मुझे पता नहीं है कि बैकअप और रिस्टोर कब होते हैं और यह सुविधा केवल समस्याओं का कारण बनती है।

हमने अपना AndroidManifest संशोधित किया है जैसा कि निम्नलिखित 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>

एक बार जब हम स्पष्ट रूप से मूल्य को गलत पर सेट करते हैं, तो सभी काम करने लगते हैं। मुझे उम्मीद है कि यह एक ऑप्ट-इन फ़ीचर होगा लेकिन ... ऐसा लगता है कि यह उन ऐप्स के लिए डिफ़ॉल्ट रूप से हो सकता है जो किसी भी तरह से मूल्य निर्दिष्ट नहीं करते हैं।


धन्यवाद। मेरी भी यही समस्या थी।
हादी फ़ुलादी तलारी

15

आपको अपने डिवाइस की बैकअप और रीसेट सेटिंग्स की जांच करनी चाहिए, और स्वचालित पुनर्स्थापना को बंद कर देना चाहिए (जब किसी एप्लिकेशन को पुन: स्थापित करना, सेटिंग्स और डेटा को पुनर्स्थापित करना होगा।)

ऑटो-बैकअप बंद करना ऑटो-रिस्टोर से अलग है। अगर आपको लगता है कि ऐसा करने के लिए ऑटो-बैकअप चालू करना सहायक होगा। लेकिन अगर आपको लगता है कि इससे ऐसे अंतिम उपयोगकर्ता बन जाएंगे जिन्हें इस बात की जानकारी नहीं है कि उनके डिवाइस की ऑटो-रिस्टोर सुविधा चालू है, तो इसे बंद करने के लिए स्वतंत्र महसूस करें।

मेरे मामले में, मैंने AllowBackup सुविधा को बंद कर दिया, लेकिन चूंकि मेरे पास पहले से ही क्लाउड पर पिछले संस्करण का बैकअप था, इसलिए यह अभी भी बहाल हो रहा है।

Android 6.0 पर सैमसंग डिवाइस के लिए संदर्भ के रूप में छवि देखें। अन्य उपकरणों और संस्करणों में एक अलग स्क्रीन हो सकती है। नीचे देखें इमेज

बैकअप और रीसेट के तहत स्वचालित पुनर्स्थापना सेटिंग


मेरे पास एक ही मुद्दा है, मेरे ऐप ने कुछ उपयोगकर्ताओं के लिए डेटा का बैकअप लिया था जब वह चालू था। क्या सिंक किए गए डेटा को साफ़ / त्यागने की कोई संभावना है?
आदित्य चौहान

5

मुझे हाल ही में इन सुविधाओं का लाभ उठाने की आवश्यकता थी, मैं प्रलेखन को उजागर करने में सक्षम था और व्यापक परीक्षण पर यह वही है जो मैं कटौती करने में सक्षम था:

Android: allowbackup - जिस डिवाइस पर स्थित है, उस पर स्थानीय ऐप डेटा का बैकअप लेगा।

Android: fullBackupContent - का उपयोग Google के बैकअप रिस्टोर एप के साथ संयोजन में किया जाता है और इसे एक xml फ़ाइल के माध्यम से नियंत्रित किया जा सकता है ताकि यह निर्दिष्ट किया जा सके कि बैकअप क्या है, साथ ही साथ एक BackupManager वर्ग जिसे आप इस प्रक्रिया पर आगे नियंत्रण के लिए लागू कर सकते हैं।

हालाँकि प्रलेखन में कहा गया है, और मैंने परीक्षण के साथ पुष्टि की है, कि एक पुनर्स्थापना केवल तब होगी जब डिवाइस को पुनर्स्थापित किया जाएगा और पुनर्स्थापना एप्लिकेशन डेटा प्रक्रिया को ट्रिगर किया जाएगा। या यह भी पुनर्स्थापित करेगा जब ऐप को एडीबी के माध्यम से साइडलोड किया जाता है, जो कि हम तब करते हैं जब हम एंड्रॉइड स्टूडियो के माध्यम से अपने उपकरणों पर परीक्षण या डिबग के लिए ऐप चलाते हैं। ध्यान दें कि यदि आप Android सेट करते हैं: allowbackup लेकिन कॉन्फ़िगर न करें android: fullBackupContent with a Google api कोड तो ऐप डेटा केवल स्थानीय रूप से संग्रहीत किया जाता है, जबकि यदि आपने इसे ठीक से कॉन्फ़िगर किया है, तो यदि आपका ऐप बैकअप लिया गया था और आपको एक नया डिवाइस ऐप्स मिले डेटा को क्लाउड पर संग्रहीत किया गया था ताकि इसे नए डिवाइस पर पुनर्स्थापित किया जा सके।


3

Android जोड़ रहा है: Manifest फ़ाइल में एप्लिकेशन टैग के तहत allowBackup = "false" ने मेरी समस्या हल कर दी।

यहाँ ऑटो बैकअप के साथ बैक अप उपयोगकर्ता डेटा के लिए Android प्रलेखन जाता है


2

बस Android बदलें: allowBackup = "true" से Android: allowBackup = "false", मैनिफ़ेस्ट। 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>

2

बस इसे जोड़ते हुए, हमने पाया कि एंड्रॉइड 9 (एक एचएमडी नोकिया डिवाइस पर) जो कि परिसंपत्तियों को आयोजित किया गया था, यहां तक ​​कि ऐप को इंटरफ़ेस के माध्यम से और अदब के माध्यम से हटा दिया गया।

जोड़ने का उत्तर:

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 एक नई प्रकट सेटिंग है (मैं अनुमान लगा रहा हूं)। "अगर उपयोगकर्ता सही है तो ऐप के डेटा को अनइंस्टॉल रखने के लिए कहा जाए"। यह दुरुपयोग के लिए पका हुआ लगता है, लेकिन मैं देख सकता हूं कि यह कुछ ऐप्स के लिए उपयोगी हो सकता है।

Https://commonsware.com/blog/2019/06/06/random-musings-q-beta-4.html देखें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.