Cihaz kapatıldıktan sonra Android uygulaması neden önceki bir sürüme geri dönüyor?


11

Android uygulaması ile bu çok garip davranışı gözlemledi. Yaklaşık senaryo:

  1. Cihaza kurulu A Versiyonu
  2. Uygulama iyi çalışıyor
  3. Cihaza B sürümü yüklendi (B> A)
  4. Uygulama iyi çalışıyor
  5. Pil boşalması nedeniyle cihaz kapanıyor
  6. Cihaz açık
  7. Uygulamanın A sürümü cihazda tekrar çalışıyor

İlave bilgi:

  • Uygulama Google Play üzerinden dağıtılmaz, ancak USB bağlantısı yoluyla şirket içi yüklenir (NOT: uygulama üretimde çalışır; AndroidStudio aracılığıyla yüklenmez).
  • büfe
  • Android 5.1 (API 22)

Sanırım iki sorum var:

  • Cihaz neden APK'nin eski sürümünü önbelleğe aldı (ve nerede önbelleğe aldı)?
  • Hangi koşullar altında uygulamalar böyle eski sürümlere geri dönebilir?

Düzenle (daha fazla bilgi):

  • APK geri alındıktan sonra, uygulama bazı izinleri kaybeder (belki de hepsi). Android API'lerinden SecurityException özel durumu nedeniyle geri alma işleminden önce çalışan işlevler durur. Bu, Android'in bu sürümünün henüz çalışma zamanı izinleri olmamasına rağmen olur!
  • : Tabletin dosya sistemi göz attıktan sonra, ben aslında birkaç uygulamanın APK'lar benzer yolları altında yaşayan bkz /data/app/com.myapp-2/base.apk, /data/app/com.myapp-3/base.apkvb

Mevcut hipotezim, pil tüketiminin tabletin durumunu "sıfırlamasına" neden olması (örneğin saat de sıfırlanıyor) ve tekrar açıldığında uygulamanın APK'ları arasında kafa karıştırıyor ve yanlış olanı yüklüyor.

Ancak, bunu neden yapacağımı veya bu davranışı nasıl önleyeceğime dair hiçbir fikrim yok.


Bu davranışla da karşılaştım. belki bu, apk'yi böldüğü için anında çalıştırma ve yeniden başlatma cihazının işlemi kırması ve önceki sürüme geri dönmesi nedeniyle oluşur.
touhid udoy

Bu cihazlarda farklı kullanıcılar mı kullanıyorsunuz? Belki bir misafir oturumu?
tynn

Bu aygıta özgü olabilir (varsayılan önbellek ayarları). Başka cihazlarda test yaptınız mı?
Taslim Oseni

Android emülatöründe test ettiniz mi?
Squti

@TaslimOseni, saha içi dağıtım için kullanılan belirli bir tablet modeli vardır. Ayrıca, kolayca çoğalan bir şey değildir. Laboratuarda sadece bir kez gördük.
Vasiliy

Yanıtlar:


2

Android Studio 3.5+ kullanıyorsanız, anında çalıştırma yerine, muhtemelen Değişiklikleri Uygula'yı kullanıyorsunuzdur.

Bu, apk'yi yeniden yazmadan cihaza değişiklikleri göndermenin farklı bir yoluna sahiptir, bu nedenle, yeniden başlattıktan sonra, uygulamanızı doğrudan cihazda çalıştırırsanız çalıştıracağınız apk'nin biriyle ilgisi olmadığı çok mantıklıdır. daha önce koşuyordu

Değişiklikleri uygula

Anında Çalıştır ve Android Studio 3.5'te Değişiklikleri Uygula adı verilen daha pratik bir yaklaşımla baştan sona yeniden tasarlandı ve uygulandı. Değişiklikleri Uygula, güvenilir ve tutarlı davranış sağlamak için Android Oreo ve sonraki sürümlerden platforma özgü API'ları kullanır; Anında Çalışmanın aksine, Değişiklikleri Uygula APK'nızı değiştirmez.

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


Bu sorun üretimde olur ve uygulama AndroidStudio aracılığıyla cihazlara yüklenmez. Anında çalıştırma veya uygulama değişikliklerinin bununla ne ilgisi var?
Vasiliy

oh, üzgünüm, "Uygulama Google Play üzerinden dağıtılmadı, ancak USB bağlantısı yoluyla şirket içi yüklendi" denildiğinden beri Android Studio'yu otomatik olarak düşündüm. Güncellemenizden sonra açıktır. Biraz daha düşüneceğim ...
Carlos Robles

1

Bu, kullanıcı tarafından kurulan paketleri listeler:

adb shell cmd package help

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

Ve sonra yeniden yüklemeden önce tamamen kaldırın:

adb uninstall com.myapp

Anında çalıştırma ve yama APK'sını uygulamayan ( pmyardım çıkışına bakın), bu temel APK'yi çalıştırabilir. Bu hiçbir şeyi geri almaz, ancak diğer APK'sı aşırı yüklü olmayan bir APK olabilir (Android Studio hot-patch'in uygulamasını otomatikleştirebilir, ancak önyükleme sırasında durum böyle olmayabilir). Anında çalıştırma kullanmama bu yama güncelleme APK'sını kaldırır; ve sadece bir APK olduğunda, çalıştırılacak başka bir şey yoktur.


3
Üzgünüm, bunun sorularıma nasıl cevap verdiğini anlamıyorum. Bu dosyaları da ADB aracılığıyla manuel olarak silebilirim, ancak bu noktada bunun neden olduğunu anlamak istiyorum.
Vasiliy

@ Vasiliy muhtemelen Dalvik VM anında çalışma yama APK farklı işlemektedir. Asıl soru, neden farklı versiyonlarda sözde aynı şeyin iki farklı örneği bile var?
Martin Zeitler

Anında koşmanın tüm bunlarla ne yapacağından emin değilim. APK'ler AndroidStudio aracılığıyla yüklenmedi. Dediğiniz gibi, sorulardan biri "neden aynı uygulama için APK'ların birden fazla örneği var", ancak cevabınızın nasıl cevap verdiğini göremiyorum ...
Vasiliy

@ Vasiliy ile başlamak için birden fazla APK olmamalıdır - ve eğer varsa, yama APK'sı uygulanmalıdır. "Değişiklikleri uygula" ile önyükleme süresi arasında bir fark vardır.
Martin Zeitler

1

Cihaz neden APK'nin eski sürümünü önbelleğe aldı (ve nerede önbelleğe aldı)?

Buradaki hile sürüm kodunda. Yeni bir sürüm yüklediğinizde , yeni sürümün farklı bir sürüm koduna sahip olduğundan emin olun . Android işletim sistemi, aynı APK'nın farklı sürümlerini ayırt etmek için sürüm kodlarını kullanır, bu yüzden bu işe yarar.

Bu geri dönüşün neden gerçekleştiği tam olarak belli değil. Bu garip bir aygıta özgü bir sorundur, ancak yine de, aygıtın varsayılan yükleyicisi, depolama / önbellek ayarları, aygıt belleği, virüsler vb.


Umarım bu yardımcı olur. Mutlu kodlama!


1
Sorunu hala çözemedik, ancak cevabınız teorik olarak ilişkili olabilecek tek soru olduğundan, ödül sizin!
Vasiliy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.