Mengapa saya perlu menghapus Dalvik Cache?

46

Saat saya memperbarui ROM khusus, selalu ada instruksi untuk menghapus cache Dalvik . Saya tidak melihat alasan mengapa ini perlu.

Menonton logcat ketika sistem sedang boot saya dapat dengan jelas melihat bahwa jika suatu aplikasi berubah, dexfile -nya tidak valid dan kemudian dibuat ulang. Namun masih ketika saya menyebutkan ini di mana saja saya bertemu dengan diam. Seolah tidak ada beberapa pengembang ROM yang menyadari hal ini dan mereka hanya melakukan ini karena semua orang melakukannya.

Jadi pertanyaannya:

  • Apakah ada versi Android di mana file Dalvik tidak valid saat boot?
  • Apakah ada keuntungan dalam melakukan ini sendiri, daripada membiarkan sistem melakukan pekerjaan yang seharusnya dilakukan?

Jawaban yang ideal akan menyertakan referensi ke kode yang relevan, jadi saya akan memiliki referensi saat ini muncul.

RR
sumber

Jawaban:

43

Untuk menjawab pertanyaan Anda:

  • Saya tidak mengetahui versi Android mana Dalvik tidak valid saat boot. Mungkin versi awal 1.0 punya itu, saya benar-benar tidak tahu, telah melalui Eclair, Froyo, Gingerbread, Ice Cream Sandwich. Anda perlu melihat ke pohon sumber dan rebase kembali ke CupCake atau Donut (masing-masing 1,5 dan 1,6)

  • Alasan terperinci :)

Alasan Wipe Cache harus digunakan adalah karena semua apks, termasuk apks sistem, memiliki file dex yang menyertainya, ketika ROM di-boot untuk pertama kalinya, Dalvik Android melewati masing-masing dan semua apks itu, dan mengekstrak file dex dari itu dan letakkan di cache /data/dalvik-cachesehingga mempercepat eksekusi aplikasi itu sendiri.

Sebagian besar ROM memiliki apks yang ditambahkan , cache dibundel ke dalam apk itu sendiri sebagai file eksternal.

Banyak pengubahsuai ROM kustom memiliki apks deodex 'd, yang berarti file dex diganti dan dikemas ulang untuk membuatnya lebih mudah untuk tema / memodifikasi apk.

Ketika Anda mem-flash ROM kustom, dan tidak menghapus cache, apk custom ROM yang lebih baru akan memiliki file dex yang berbeda yang melekat padanya, dan ketika Dalvik melewatinya, ia melihat file dex cache yang ada ditemukan di direktori, dan melewatkannya, lalu ketika Anda menjalankan aplikasi, Anda dijamin akan menutup paksa atau PPA (Aplikasi Tidak Menanggapi).

Anda tidak akan kehilangan data semata, jika menggunakan ClockWorkMod Recovery, dan Wipe Data dipilih, maka ya, semua pengaturan yang berkaitan dengan aplikasi dihapus dengan benar - lihat /data/app.

Jadi Anda dapat menghapus Cache tetapi tidak menghapus data , apa yang dilakukan secara efektif, ditempatkan di apks yang lebih baru di tempat, di mana pengaturannya dipertahankan. Ini adalah skenario yang cukup umum dengan CyanogenMod nightlies di mana ROM ROM yang tidak stabil / sedang di-flash, dan pengaturan dipertahankan dengan penghapusan cache. Jarak tempuh akan bervariasi tergantung pada aplikasi apa yang diunduh dari pasar (pengaturan kemungkinan akan berubah berdasarkan versi bump).

Untuk hasil terbaik, sebaiknya lakukan Wipe Data dan Wipe Cache untuk memastikan integritas dan tidak ada kesalahan program dalam aplikasi itu sendiri.

Ya itu berarti waktu booting akan lebih lambat tapi momen awalnya sekali saja. Setelah itu akan booting lebih cepat. Singkatnya, secara eksplisit menghapus cache itu sendiri melalui CWM sebenarnya membantu mempercepatnya dan memastikan tidak ada residu dari versi sebelumnya di tempat yang bisa dimasukkan ke dalam (Sekarang pada tahap ini, saya menyadari pertanyaan Anda sehingga dalam semua keadilan, belum benar-benar melihat Android tidak melakukan pembatalan cache sendiri saat boot ketika menginstal ROM baru ..)

Gunakan sumber Lukas dengan serius! : D

frameworks/base/core/java/com/android/internal/os/ZygoteInit.javaadalah kode bootup untuk setiap runtime apk. Ini berinteraksi dengan kode C asli yang ditemukan di dalvikpohon direktori yang berisi instruksi chipset spesifik untuk menginterpretasikan bytecode dalam apk ke set instruksi CPU asli. ARMv6 cukup banyak versi yang diretas ARMv5 (yang merupakan chipset asli di versi Android yang lebih lama sebelum Eclair), sehingga Anda tidak akan melihat ARMv6 di sumber AOSP dari google. CyanogenMod akan memiliki ARMv6 di sumbernya.

t0mm13b
sumber
Demi diskusi ini, mari kita asumsikan bahwa kita sedang berbicara tentang rilis resmi CM7. Mari saya mulai dengan mengatakan bahwa saya tidak pernah, pernah menghapus cache dalvik saya dan tidak pernah mengalami masalah yang akan diselesaikan dengan melakukannya. Karena tidak di-odex, tidak mungkin ada banyak file (o) dex, dan saat boot file lama diganti dengan yang baru dibuat. Oh dan jika ini masalah besar, mengapa pengembang tidak menambahkan ini ke skrip updater? Saya akan memeriksa sumbernya, terima kasih.
RR
1
Anda sebenarnya bisa secara eksplisit memasukkannya ke dalam skrip updater, tetapi itu bisa membuat orang lain kesal ketika menginstal karena "Oh sial, saya kehilangan pengaturan / data saya" dan CM mungkin tidak ingin terbakar oleh pertanyaan / jawaban nyala seperti pada " Mengapa Anda menghapus cache saya ketika menginstal CM baru? " - mungkin karena tanggung jawab CM, jadi berikan opsi itu kepada pengguna akhir? Dan menaruhnya kembali pada mereka sehingga jika mereka menyala tanpa menghapus, dan merengek di forum dan "Hei aplikasi saya mogok", CM dapat berbalik dan berkata "Apakah Anda menghapus?"
t0mm13b
Saya tidak bermaksud data/datatapi data\dalvik-cache. Mungkin hanya yang sistem.
RR
1
Stok ROM AOSP tidak ada, CM telah memodifikasi sistem build untuk menggunakan deodex .... hanya mengatakan;)
t0mm13b
2
Terima kasih atas jawaban terinci t0mm13b. Jadi saya jelas ... Sepertinya jawaban sederhana untuk pertanyaan yang diposting adalah "Anda tidak. Itu dihapus secara default saat boot." Benar?
GollyJer