Articles

Proč musím vymazat Dalvik Cache?

Odpovídám na vaše otázky:

  • Nevím o žádné verzi Androidu, kde by Dalvik nebyl při startu systému zneplatněn. Možná to měla původní verze 1.0, to opravdu nevím, prošel jsem Eclair, Froyo, Gingerbread, Ice Cream Sandwich. Je potřeba se podívat do zdrojového stromu a přebasovat ho zpět na CupCake nebo Donut (1.5 a 1.6 respektive)

  • Detailní důvod 🙂

Důvod, proč se musí použít Wipe Cache je ten, že všechny apky, včetně systémových, mají připojený dex soubor, při prvním spuštění ROM Dalvik Androidu projde každou z těchto apek a dex soubor z ní extrahuje a umístí do cache /data/dalvik-cache čímž urychlí samotné spuštění aplikace.

Většina ROM má apky, které jsou odex ‚ed, cache je přibalena k samotné apk jako externí soubor.

Spousta custom ROM modderů by tyto apky deodex ‚d, což znamená, že dex soubor je nahrazen a přebalen, aby bylo snazší téma/modifikace apk.

Když flashnete custom ROM a nesmazali jste cache, novější apk custom ROM budou mít připojený jiný dex soubor a když je Dalvik prochází, vidí existující cachovaný dex soubor nalezený v adresáři a přeskočí ho, pak při spuštění aplikace máte zaručené vynucené zavření nebo ANR (Application Not Responding).

O data jako taková nepřicházíš, pokud používáš ClockWorkMod Recovery a je zvoleno Wipe Data, pak ano, všechna nastavení týkající se aplikací se čistě smažou – podívej se do /data/app.

Takže můžeš Wipe Cache, ale ne Wipe Data, co se efektivně dělá, je slot v novějších apkách na místě, ve kterém má zachované nastavení. To byl poměrně častý scénář u CyanogenMod nightlies, kdy se flashne nestabilní/testovací sestavení ROM a nastavení se zachová s vymazáním cache. Kilometráž se bude lišit podle toho, jaké aplikace se stáhly z marketu (nastavení by se dost pravděpodobně změnilo nárazem verze).

Pro nejlepší výsledky by bylo vhodné provést jak Wipe Data, tak Wipe Cache, aby byla zajištěna integrita a nedošlo k chybám programu v samotné aplikaci.

Ano, to by znamenalo, že doba bootování bude pomalejší, ale jeho počáteční jednorázový okamžik. Poté by byl start rychlejší. Opravdu v kostce, explicitně vymazání cache sám přes CWM skutečně pomáhá zrychlit a zajistit žádné zbytky z předchozí verze na místě, které by mohly dostat munged v (Nyní v této fázi, jsem si uvědomil, že vaše otázka, takže ve vší spravedlnosti, neviděl vlastně Android neprovádí zneplatnění cache sám při startu při flashování nové ROM..).

Používejte zdrojový kód Lukáše vážně! 😀

frameworks/base/core/java/com/android/internal/os/ZygoteInit.java je zaváděcí kód pro každý apk runtime. Spolupracuje s nativním kódem C, který se nachází ve stromu adresářů dalvik a který obsahuje specifické instrukce čipové sady pro interpretaci bajtkódu v apk na nativní instrukční sadu procesoru. ARMv6 je do značné míry osekaná verze ARMv5 (což byla původní čipová sada ve starších verzích Androidu před Eclairem), takže ARMv6 ve zdrojovém kódu AOSP od Googlu neuvidíte. CyanogenMod bude mít ARMv6 ve svých zdrojových kódech.