डिवाइस के बंद होने के बाद एंड्रॉइड ऐप पिछले संस्करण में वापस क्यों आता है?


11

Android एप्लिकेशन के साथ इस बहुत ही अजीब व्यवहार का अवलोकन किया। अनुमानित परिदृश्य:

  1. संस्करण ए डिवाइस पर स्थापित है
  2. एप्लिकेशन ठीक काम करता है
  3. डिवाइस पर स्थापित संस्करण B (B> A)
  4. एप्लिकेशन ठीक काम करता है
  5. बैटरी ड्रेन के कारण डिवाइस बंद हो जाता है
  6. डिवाइस चालू हो गया
  7. अनुप्रयोग का संस्करण A फिर से डिवाइस पर चलता है

अतिरिक्त जानकारी:

  • एप्लिकेशन को Google Play के माध्यम से वितरित नहीं किया गया है, लेकिन USB कनेक्शन के माध्यम से स्थापित किया गया है (नोट: एप्लिकेशन उत्पादन में चलता है; यह AndroidStudio के माध्यम से स्थापित नहीं है)।
  • कीओस्क
  • Android 5.1 (एपीआई 22)

मुझे लगता है कि मुझे दो प्रश्न मिले हैं:

  • डिवाइस ने एपीके के पुराने संस्करण को कैश क्यों किया (और इसे कैश कहां किया)?
  • किन परिस्थितियों में एप्लिकेशन उस तरह पिछले संस्करणों में वापस रोल कर सकते हैं?

संपादित करें (अधिक जानकारी):

  • ऐसा लगता है कि एपीके को वापस ले जाने के बाद, एप्लिकेशन कुछ अनुमतियाँ खो देता है (शायद सभी भी)। एंड्रॉइड के एपीआई से सिक्योरिटी एक्ससेप्शन के कारण रोल-बैक से पहले काम करने वाली कार्यक्षमता काम करना बंद कर देती है। यह तब भी होता है, जबकि Android के इस संस्करण में अभी तक रनटाइम अनुमति नहीं है!
  • टेबलेट के फाइल सिस्टम ब्राउज़ कर के बाद, मैं वास्तव में देखने के कई एप्लिकेशन के APK की समान पथ के तहत रहने वाले: /data/app/com.myapp-2/base.apk, /data/app/com.myapp-3/base.apk, आदि

मेरी वर्तमान परिकल्पना यह है कि बैटरी ड्रेन टैबलेट को उसकी स्थिति को "रीसेट" करने का कारण बनता है (उदाहरण के लिए, घड़ी भी रीसेट है), और जब इसे फिर से संचालित किया जाता है तो यह ऐप के APK के बीच भ्रमित करता है और गलत लोड करता है।

हालांकि, मेरे पास कोई सुराग नहीं है कि यह ऐसा क्यों करेगा, या इस व्यवहार को कैसे रोका जाएगा।


मैंने इस व्यवहार का भी सामना किया। हो सकता है कि यह इंस्टेंट रन के कारण होता है क्योंकि यह एपीके को विभाजित करता है और रिस्टार्टिंग डिवाइस पिछले संस्करण में प्रक्रिया और रोलबैक को तोड़ता है।
— तौहीद उदोय

क्या आप इन उपकरणों पर विभिन्न उपयोगकर्ताओं का उपयोग कर रहे हैं? शायद एक अतिथि सत्र?
— tynn

यह डिवाइस-विशिष्ट (डिफ़ॉल्ट कैश सेटिंग्स) हो सकता है। क्या आपने अन्य उपकरणों पर परीक्षण किया है?
— तसलीम ओसेनी

क्या आपने इसे एंड्रॉइड एमुलेटर पर परीक्षण किया था?
— सक्ती

@ तस्लीमओसेनी, इन-फील्ड परिनियोजन के लिए उपयोग किए जाने वाले टैबलेट का एक विशिष्ट मॉडल है। इसके अलावा, यह कुछ ऐसा नहीं है जो आसानी से पुन: पेश करता है। हमने इसे लैब में सिर्फ एक बार देखा।
— वासिली

जवाबों:


2

यदि आप एंड्रॉइड स्टूडियो 3.5+ का उपयोग कर रहे हैं, तो तत्काल रन के बजाय, आप संभावित परिवर्तन का उपयोग कर रहे हैं।

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

परिवर्तन लागू करें

इंस्टेंट रन और फिर से आर्किटेक्चर किया गया और इसे एंड्रॉइड स्टूडियो 3.5 में अप्लाय चेंजेस नामक एक अधिक व्यावहारिक दृष्टिकोण के आधार पर लागू किया गया। एंड्रॉइड ओरेओ से प्लेटफॉर्म-विशिष्ट एपीआई का उपयोग करें और विश्वसनीय और सुसंगत व्यवहार सुनिश्चित करने के लिए परिवर्तन लागू करें; इंस्टेंट रन के विपरीत, अप्लाई चेंजेस आपके एपीके को संशोधित नहीं करता है।

https://android-developers.googleblog.com/2019/08/android-studio-35-project-marble-goes.html


यह समस्या उत्पादन में होती है और ऐप AndroidStudio के माध्यम से उपकरणों पर स्थापित नहीं है। तत्काल चलाने या परिवर्तन लागू करने के लिए क्या करना है?
— वासिली

ओह, क्षमा करें, मैंने मान लिया जब से आपने "एप्लिकेशन Google Play के माध्यम से वितरित नहीं किया गया है, लेकिन USB कनेक्शन के माध्यम से स्थापित किया है" तो मैंने स्वचालित रूप से Android स्टूडियो के बारे में सोचा। आपके अपडेट के बाद यह स्पष्ट है। मैं थोड़ा और
— कार्लोस रॉबल्स

1

यह उपयोगकर्ता स्थापित संकुल को सूचीबद्ध करता है:

adb shell cmd package help

pm list packages -f -U -3 --show-versioncode

और फिर पुनः स्थापित करने से पहले पूरी तरह से स्थापना रद्द करें:

adb uninstall com.myapp

तत्काल रन के साथ और पैच एपीके को लागू न करें ( pmसहायता आउटपुट देखें ), यह आधार एपीके को चला सकता है। यह कुछ भी रोल-बैक नहीं करता है, लेकिन यह संभव है कि एक एपीके के बिना अन्य एपीके ओवरलोडेड (एंड्रॉइड स्टूडियो हॉट-पैच के एप्लिकेशन को स्वचालित कर सकता है, लेकिन बूट समय पर यह मामला नहीं हो सकता है)। तत्काल रन का उपयोग न करना इन पैच अपडेट को हटा देता है APK; और जब केवल एक ही एपीके है, तो चलाने के लिए और कुछ नहीं है।


3
क्षमा करें, यह न देखें कि यह मेरे किसी भी प्रश्न का उत्तर कैसे देता है। मैं एडीबी के माध्यम से इन फ़ाइलों को मैन्युअल रूप से मिटा भी सकता हूं, लेकिन, इस बिंदु पर, मैं समझना चाहता हूं कि ऐसा क्यों होता है।
— वासिली

@Vasiliy की संभावना है क्योंकि Dalvik VM तुरंत रन पैच एपीके को अलग तरीके से संभाल रहा है। वास्तविक सवाल यह है कि अलग-अलग संस्करणों में कथित रूप से एक ही चीज के दो अलग-अलग उदाहरण क्यों हैं?
— मार्टिन ज़ेटलर

मुझे यकीन नहीं है कि यह सब करने के लिए तुरंत क्या करना है। AndroidStudio के माध्यम से APK स्थापित नहीं किए गए थे। जैसा कि आप कहते हैं, एक सवाल यह है कि "एक ही ऐप के लिए APK के कई उदाहरण क्यों हैं", लेकिन मैं यह नहीं देखता कि आपका उत्तर इसका उत्तर कैसे देता है ...
— Vasiliy

@Vasiliy के साथ शुरू करने के लिए एकाधिक एपीके नहीं होना चाहिए - और यदि, तो पैच एपीके लागू किया जाना चाहिए। "परिवर्तन लागू करें" और बूट समय के बीच अंतर है।
— मार्टिन जिइटलर

1

डिवाइस ने एपीके के पुराने संस्करण को कैश क्यों किया (और इसे कैश कहां किया)?

यहां ट्रिक वर्जन कोड में है। जब आप एक नया संस्करण स्थापित करते हैं, तो सुनिश्चित करें कि नए संस्करण में एक अलग संस्करण कोड है । एंड्रॉइड ओएस एक ही एपीके के विभिन्न संस्करणों के बीच अंतर करने के लिए संस्करण कोड का उपयोग करता है, इसलिए यह काम करेगा।

यह वास्तव में स्पष्ट नहीं है कि यह रोलबैक क्यों होता है। यह स्पष्ट रूप से एक अजीब डिवाइस-विशिष्ट समस्या है लेकिन फिर भी, डिवाइस के डिफ़ॉल्ट इंस्टॉलर, स्टोरेज / कैश सेटिंग्स, डिवाइस मेमोरी, वायरस, आदि सहित कारकों का एक टन जिम्मेदार हो सकता है।


आशा है कि ये आपकी मदद करेगा। मीरा कोडिंग!


1
हमने अभी भी समस्या का पता नहीं लगाया है, लेकिन चूंकि आपका उत्तर एकमात्र ऐसा है, जो सैद्धांतिक रूप से संबंधित हो सकता है, इनाम आपका है!
— वासिली
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.