Articles

Por que preciso limpar o Dalvik Cache?

Para responder suas perguntas:

  • Não tenho conhecimento de nenhuma versão do Android onde o Dalvik não foi invalidado na inicialização. Talvez a versão inicial 1.0 tinha isso, eu realmente não sei, passou por Eclair, Froyo, Gingerbread, Ice Cream Sandwich. Você precisa olhar na árvore de origem e rebaseá-la de volta para CupCake ou Donut (1.5 e 1.6 respectivamente)

  • A razão detalhada 🙂

A razão pela qual o Wipe Cache deve ser usado é porque todos os apks, incluindo os apks do sistema, têm um ficheiro dex anexado a ele, quando a ROM é inicializada pela primeira vez, o Dalvik do Android passa por cada um desses apks, e extrai o ficheiro dex a partir dele e coloca-o na cache /data/dalvik-cache acelerando assim a execução do próprio app.

Muitas ROMs têm apks que são odex ‘ed, a cache é empacotada no próprio apk como um ficheiro externo.

Muitos modders de ROM personalizados teriam esses apks deodex ‘d, o que significa que o ficheiro dex é substituído e reembalado para facilitar o tema/modificação de um apk.

Quando você acessa uma ROM personalizada, e não limpou o cache, os apk’s da nova ROM personalizada terão um arquivo dex diferente anexado a ela, e quando o Dalvik passa por eles, ele vê o arquivo dex existente em cache encontrado no diretório, e salta-o, então quando você executa o aplicativo, você tem a garantia de um fechamento forçado ou ANR (Application Not Responding).

Você não está perdendo dados per se, se estiver usando ClockWorkMod Recovery, e Wipe Data estiver selecionado, então sim, todas as configurações relacionadas aos aplicativos são limpas – veja em /data/app.

Então você pode Wipe Cache mas não Wipe Data, o que é feito efetivamente, é encaixado nos apks mais recentes no lugar, no qual tem as configurações retidas. Este foi um cenário bastante comum com o CyanogenMod nightlies onde uma construção de ROM instável/de teste é piscada, e as configurações retidas com a limpeza da cache. A quilometragem irá variar dependendo dos aplicativos baixados do mercado (as configurações teriam mudado por lance de versão muito provavelmente).

Para melhores resultados seria sábio executar tanto Wipe Data como Wipe Cache para garantir a integridade e nenhum erro de programa dentro da própria aplicação.

Sim, isso significaria que o tempo de inicialização seria mais lento, mas seu momento inicial, uma vez desligado. Depois disso, ele estaria inicializando mais rápido. Realmente em poucas palavras, limpar explicitamente a cache em si através do CWM ajuda a acelerá-la e assegurar que não haja resíduos da versão anterior no local que poderiam ser inseridos (Agora, nesta fase, estou percebendo sua pergunta, portanto, com toda a justiça, não vi o Android não executar a invalidação da cache em si no momento do boot ao piscar uma nova ROM…)

Use o código fonte Luke seriamente! 😀

frameworks/base/core/java/com/android/internal/os/ZygoteInit.java é o código de inicialização para cada tempo de execução do apk. Ele interage com o código C nativo encontrado na árvore de diretórios dalvik que contém instruções específicas do chipset para interpretar o bytecode dentro do conjunto de instruções do apk para a CPU nativa. ARMv6 é praticamente uma versão hackeada do ARMv5 (que era o chipset original nas versões antigas do Android antes do Eclair), então você não verá o ARMv6 no fonte AOSP do google. CyanogenMod terá esse ARMv6 na sua fonte.