Dalvik Önbelleğini Silmem Neden Gerekir?


46

Özel bir ROM'u güncellerken , Dalvik önbelleğini silmek için her zaman bir talimat vardır . Bunun mutlaka olması için bir neden görmüyorum.

Sistem önyüklenirken logcat'ı izlemek Bir uygulama değiştiyse, dexdosyasının geçersiz olduğunu ve daha sonra yenilendiğini açıkça görebiliyorum . Yine de, her yerde bundan bahsettiğimde sessizlikle karşılaştım. Sanki bazı ROM geliştiricileri bile farkında değiller ve bunu herkes yapıyor çünkü bunu yapıyorlar.

Yani sorular:

  • Dalvik dosyalarının önyükleme sırasında geçersiz kılınmadığı bir Android sürümü var mıydı?
  • Sistemin yapması gereken işi yapmasına izin vermek yerine, bunu kendiniz yapmanın herhangi bir avantajı var mı?

İdeal bir cevap ilgili koda referanslar içerecektir, bu yüzden bir dahaki sefere geldiğinde bir referansım olacaktı.

Yanıtlar:


43

Sorularınıza cevap vermek için:

  • Dalvik'in açılışta geçersiz kılındığı hiçbir Android sürümünün farkında değilim. Belki de ilk sürüm 1.0, gerçekten bilmiyorum, Eclair, Froyo, Gingerbread, Ice Cream Sandwich'den geçmiştir. Kaynak ağaca bakmanız ve tekrar CupCake veya Donut'a yeniden yatırmanız gerekir (sırasıyla 1.5 ve 1.6)

  • Detaylı nedeni :)

Nedeni Wipe Cache sistemi apks dahil tüm apks, bir var çünkü kullanılmalıdır olan dex ROM ilk defa başlattım zaman, ona bağlı dosyayı, Android'in Dalvik her geçer ve her o apks biri ve özü dex dosyasını ondan önbelleğe yerleştirin ve /data/dalvik-cacheböylece uygulamanın kendisinin çalışmasını hızlandırın.

ROM'ların çoğunda gizlenmiş bir uygulama var , önbellek apk içine harici bir dosya olarak eklenmiş .

Bir çok özel ROM modderinin deodex'd apks'leri olur, bu da bir betiği temayı / değiştirmeyi kolaylaştırmak için dex dosyasının değiştirildiği ve yeniden paketlendiği anlamına gelir.

Özel bir ROM’u yanıp söndüğünüzde ve önbelleği silmediğinizde, yeni özel ROM’un apkunun kendisine bağlı farklı bir dex dosyası olur ve Dalvik bunların içinden geçtiğinde, dizinde bulunan mevcut önbelleğe alınmış dex dosyasını görür ve atlar, ardından uygulamayı çalıştırdığınızda, yakın bir kuvvet veya ANR (Uygulama Yanıt Vermiyor) olarak garanti edilir.

Eğer ClockWorkMod Recovery kullanıyorsanız ve Verileri Sil seçiliyse, kendi başınıza veri kaybetmezsiniz , ardından evet, uygulamalarla ilgili tüm ayarlar temiz bir şekilde silinir - bakın /data/app.

Böylece, Önbelleği Silebilirsiniz ancak Verileri Silemezsiniz, etkin bir şekilde yapılanlar, ayarları korunduğu yeni yerlere yerleştirilir. Bu, kararsız / test edici bir ROM yapısının parlatıldığı ve ayarların önbellek silme ile tutulduğu CyanogenMod nightlies ile oldukça yaygın bir senaryodu. Kilometre, piyasadan hangi uygulamaların indirildiğine bağlı olarak değişebilir (ayarlar sürüm sürümüne göre büyük olasılıkla değişebilirdi).

En iyi sonuçlar için bütünlüğü sağlamak ve uygulamanın kendisinde program hataları olmaması için Verileri Silme ve Önbelleği Silme işleminin yapılması akıllıca olacaktır .

Evet, bu açılış zamanının daha yavaş olacağı, ancak başlangıçta bir kez olduğu anlamına gelir. Bundan sonra daha hızlı önyükleme olurdu. Gerçekten kısaca, önbelleğin kendisini CWM ile açıkça silmek gerçekten hızlanmasına yardımcı oluyor ve önceki sürümden atılabilecek hiçbir kalıntı kalmamasını sağlıyor. Android yeni bir ROM yanıp sönerken önyükleme sırasında önbellek geçersiz kılma gerçekleştiremediğini gördüm ..)

Kaynak Luke'u ciddiye kullan! : D

frameworks/base/core/java/com/android/internal/os/ZygoteInit.javaHer apk çalışma zamanı için önyükleme kodudur. dalvikDizin ağacında bulunan yerel C koduyla etkileşime girerek, apk içindeki bayt kodunu yerel CPU komut setine yorumlamak için özel yonga seti talimatlarını içerir. ARMv6, ARMv5’in (Eclair’den önceki eski Android sürümlerinde bulunan orijinal yonga seti) saldırıya uğramış bir sürümüdür, bu yüzden google’dan AOSP kaynağında ARMv6’yı göremezsiniz. CyanogenMod bu ARMv6'yı kaynaklarında kullanacak.


Bu tartışma uğruna, resmi bir CM7 sürümü hakkında konuştuğumuzu varsayalım. Dalvik önbelleğimi asla ve asla silmediğimi ve çözerek çözülecek hiçbir problem yaşamadığımı söyleyerek başlayayım. Odexed olmadığından, çoklu (o) dex dosyalarının bulunmasının bir yolu yoktur ve bu nedenle önyüklemede eski dosya yeni oluşturulan bir dosyayla değiştirilir. Çok büyük bir sorunsa, geliştiriciler bunu neden güncelleyici komut dosyasına eklemiyor? Kaynağı kontrol edeceğim, teşekkürler.
RR

1
Aslında bunu açıkça updater betiğine koyabilirsiniz, ancak bu yanıp sönerken diğerlerini kızdırabilir çünkü "Ah, ne yazık ki ayarlarımı / verilerimi kaybettim" ve CM muhtemelen alev soruları / cevapları tarafından olduğu gibi yanmak istemedi " Yeni bir CM sürümü yayınlarken neden önbelleğimi sildiniz? " - belki de CM'nin sorumluluğundadır, bu yüzden bu seçeneği son kullanıcıya verdi? Ve eğer silme olmadan parlarlarsa ve forumlarda sızlanırlarsa “Hey benim uygulamam çöküyor” diyen CM, arkasına dönüp "Silindin mi?" Diyebilir.
t0mm13b

Öyle demek istemedim data/dataama data\dalvik-cache. Muhtemelen sadece sistem olanlar.
RR

1
Stok AOSP ROM'ları sıraya dizildi, CM yapı sistemini deodex'i kullanacak şekilde değiştirdi .... sadece şunu söyleyerek;)
t0mm13b

2
Ayrıntılı cevap t0mm13b için teşekkür ederiz. Sırf netleştim ... Gönderilen soruya verilen basit cevap "Öyle değil. Önyükleme sırasında varsayılan olarak siliniyor." Doğru?
GollyJer,
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.