Android App को अपडेट करने पर SharedPreferences का क्या होगा?


84

मैंने अपने ऐप में साझा सेटिंग्स में उपयोगकर्ता सेटिंग्स संग्रहीत की हैं। जब मैं Google Play Store के माध्यम से ऐप को नए संस्करण में अपडेट करता हूं, तो साझाकरण के साथ क्या होगा?

क्या अपडेट के बाद भी SharedPrefernces तब भी रहेगा या उन्हें हटा दिया जाएगा?

अब तक मुझे वेब या स्टैकओवरफ़्लो पर कोई उत्तर नहीं मिला है (क्या मैं गलत कीवर्ड खोज सकता हूँ?)।

क्या आप मुझे इस प्रक्रिया का वर्णन करने वाले कुछ लिंक की ओर संकेत कर सकते हैं?

संपादित करें: इस बीच मुझे एक अन्य उत्तर भी मिला: अद्यतन / स्थापना रद्द करने पर साझा व्यवहार व्यवहार

संपादित करें 2: चूंकि पिछले कुछ समय से जब मैंने पहली बार यह प्रश्न पूछा था, तो मैंने हाल ही में सीखा कि एंड्रॉइड 6.0 (एपीआई 23) के बाद से Google द्वारा बताई गई अपनी साझा प्राथमिकताओं को सुरक्षित करने के लिए ऑटो बैकअप कार्यक्षमता का उपयोग करना भी संभव है । बस allowBackup="true"अपनी AndroidManifest.xmlफ़ाइल में जोड़ें ।

जवाबों:


70

क्रिस्टियन यहां कहते हैं: उपयोगकर्ता द्वारा अपडेट स्थापित करने पर आपका एप्लिकेशन डेटा बना रहेगा।

लेकिन यह package nameपिछले ऐप के अपडेट के रूप में पता लगाने के लिए समान होना चाहिए ।

चेतावनी Android उपयोगकर्ता में EboMike कि ऐप अपडेट पुराने ऐप संस्करण से डेटा खोने का कारण बन सकता है? कहते हैं:

स्पष्ट रूप से, अपग्रेड के कारण डेटा खोना अस्वीकार्य है।

संपादित करें :

आम तौर पर , साझा प्रक्रिया (साथ ही अन्य उपयोगकर्ता डेटा) को अपडेट प्रक्रिया के दौरान रखा जाएगा, लेकिन कभी-कभी, कुछ " अज्ञात " समस्या के कारण, डेटा खो सकता है, और मुझे लगता है कि यह आपके नियंत्रण से बाहर है। तो, आप बस विश्वास कर सकते हैं कि शेयर्डपिरिफेंस को रखा जाएगा ( यहां देखें )।

इसलिए, यदि आप प्रगति के उन्नयन में उपयोगकर्ता के डेटा को साफ़ करने से बचना चाहते हैं, तो आपको मुख्य डेटा को बाहरी संग्रहण में सहेजना होगा (यह एक हटाने योग्य भंडारण मीडिया हो सकता है, जैसे कि एसडी कार्ड या एक आंतरिक, गैर-हटाने योग्य, भंडारण।) और नहीं। आपके App.Or के लिए निजी। कम से कम उपयोगकर्ता के लिए बैकअप डेटा को अपग्रेड करने से पहले रख दें। जब आपके (अपग्रेडेड) ऐप के पहले रन में, जाँच लें कि बाह्य भंडारण में कोई बैकअप फ़ाइल है या नहीं।

यदि आप जानना चाहते हैं कि किसी ऐप को अपग्रेड करने पर क्या चीजें होनी चाहिए / हो सकती हैं? , मैं this.It के लिए किसी भी अच्छा वर्णन जटिल है और साथ रिश्तेदार नहीं था Android Security, Application signing, copy protectionऔर अन्य मतलब topics.I कि अगर आप किसी भी ऊपर के क्षेत्रों में अपने अनुप्रयोग की स्थिति बदलने, यह अलग परिणाम उत्पन्न करता है।
उदाहरण के लिए यदि आप CHANGED COPY PROTECTION FROM ON to OFF OR OFF to ON, आपका ऐप अपडेट हो जाएगा, लेकिन आपकी सभी साझा प्राथमिकताएं खो जाती हैं, तो फ़ाइल पहुंच असंभव हो जाती है और ...।
हालाँकि आपको शर्तों के बारे में ध्यान रखना होगा, क्योंकि आपके नए ऐप being consideredको पिछले ऐप के अपडेट के रूप में देखा जा सकता है (देखें चीजें जो बदल नहीं सकती हैं )।

इसके अलावा, आपको अपने कोड के बारे में ध्यान रखना होगा, यह आपके डेटाबेस के डेटा को हटाने का कारण हो सकता है ( अपडेट किए गए ऐप को SQLite के साथ देखें )।

लेकिन अंत में, अगर आप सावधान रहें, तो आप कह सकते हैं:

अपडेट प्रक्रिया केवल एपीके फ़ाइल को बदल देती है (और उदाहरण के लिए इसमें क्या है, उदाहरण के लिए ड्रॉबल्स, ...) और डेटाबेस, साझाकरण और किसी भी अन्य फ़ाइलों को परिवर्तित नहीं करता है जो रन टाइम में उत्पन्न होती हैं (शायद इस मामले में, नया ऐप इंस्टॉल किया गया है UID जो पिछले ऐप के UID के बराबर है)।

आप अधिक विवरण के लिए ये पृष्ठ देख सकते हैं:

मदद!? बाजार पर हमारे ऐपेटोइन को अपडेट करने से सहेजे गए साझापार्टीफ़ायर हट जाते हैं।
मार्केट कॉपी प्रोटेक्शन अपडेट करने के बाद फाइल एक्सेस को पूरी तरह से तोड़ देता है।
क्या कोई ऐप अपडेट प्रक्रिया की व्याख्या कर सकता है?


धन्यवाद, यह मुझे लगता है कि साझा किए जाने वाले प्रस्ताव को ठीक रखा जाना चाहिए। लेकिन क्या इस प्रक्रिया का कोई आधिकारिक वर्णन नहीं है?
ब्रूनो बीरी

@viperbone कौन सी प्रक्रिया? सामायिक साझाकरण? या अपग्रेड ऐप?
हैशांगफोरियन 10

अपग्रेडिंग एप्स प्रक्रिया। App अपग्रेड करने पर क्या चीजें होनी चाहिए / हो सकती हैं।
ब्रूनो बीरी

@viperbone कृपया मेरा उत्तर फिर से देखें। मैंने और विवरण जोड़ा।
हैशांगफोरियन

एक और ध्यान दें: सुनिश्चित करें कि साझा प्राथमिकता नाम उन्नयन के बीच एक ही है! मेरे पास संस्करणों के बीच अलग-अलग नाम थे, इसलिए नया संस्करण पिछले संस्करणों से सहेजी गई प्राथमिकताओं को नहीं उठा रहा था ... इसे डीबग करने के लिए एक पूरी सुबह बर्बाद हो गई ...:
henry000dev

7

4 घंटे से अधिक समय तक डिबग करने के बाद मुझे पता चला कि मैं इसे क्रमबद्ध करके एक मॉडल को स्ट्रिंग के रूप में सहेज रहा हूं। क्रमबद्ध श्रेणी में क्रमबद्ध नाम से एक अद्वितीय आईडी होती है , जिसे डिफ़ॉल्ट रूप से रनटाइम पर सेट किया जाता है और आईडी की गणना वर्ग, इंटरफेस और चर नामों के नाम से की जाती है। मुझे पता चला कि मैंने मॉडल वर्ग को बदल दिया, एक चर जोड़ा और फिर ऐप को अपडेट किया। चूंकि वर्ग अब बदल गया है इसलिए एक नया सीरियलवर्जन यूआईडी सेट किया गया था और इसलिए अपडेट होने पर, यह स्ट्रिंग को डिस्क्राइब करने और मॉडल बनाने में सक्षम नहीं था और java.io.InvalidClassException दे रहा था

इस समस्या से बचने के लिए स्पष्ट रूप से serialVersionUID सेट करें

static final long serialVersionUID = 42L;

1
लेकिन सुनिश्चित करें कि आपके परिवर्तन संगत हैं या आप अजीब बग प्राप्त कर सकते हैं।
मैजगार्ड

5

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

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