[Jogos][Slideshow]

O que é Dex, Odex e Deodex

Você sabe o que é Odex? ROMs ODEXadas e DEODEXadas? Isso melhora mesmo a performance do Android? É vantajoso fazer Odex em minha ROM? Para o desenvolvedor de Roms, isso pode ser um fator essencial no desenvolvimento. Leia e saiba mais.



Descrição:
Esse tipo de tópico é um pouco difícil de explicar, pois ele se apoia em diversos outros termos que também devem ser explicados. Também deixarei alguns links em português no artigo para melhor entendimento e darei um breve resumo de cada.

Inicio

Bem,vamos do começo. O que é DEX?
1) Você escreve o programa em alguma linguagem de programação, Exemplo, Java

2) Essa linguagem será compilada por um compilador, à partir desse instante, seu código virou um bytecode feito para executar em uma maquina virtual. Lembrando que um arquivo de bytecode é um intermediário entre código de programação e código de maquina, ou seja, sua leitura será similar à uma linguagem Assembly.

Se nós estivéssemos tratando de um programa feito para a maquina virtual JVM, o processo seria apenas esse (Falando de grosso modo, claro), mas como vamos trabalhar com a maquina virtual Dalvik (Android 4.3 ou inferior. ) ou a Android RunTime(ART) (Android 4.4 ou superior) , o processo se estende um pouco mais.

Outro compilador irá pegar esse bytecode Java e re-compilá-lo, agora para o formato DEX (Dalvik Executable format), assim, este arquivo poderá ser executado pelas maquinas virtuais Dalvik ou ART.

 



Se você abrir um apk como zip, você verá o nosso arquivo-objeto classes.dex na raiz do arquivo.

 Apk aberto com WinRar

A Dalvik foi descontinuada e usamos ART (Android RunTime) que é retrocompatível com a Dalvik.

Pois bem, mas o que é ODEX?
ODEX é um acrônimo para Optimized Dalvik EXecutable, uma otimização do arquivo dex. (ah vá). Em resumo:

Quando você inicia seu Android pela primeira vez, ele cria o Dalvik Cache, que são os arquivos dex que estavam dentro dos apps, só que otimizados para o seu sistema. A criação do Dalvik Cache pelo seu sistema é a operação mais demorada do boot inicial. Esses arquivos de cache ficam no diretório '/data/dalvik-cache'.

O Android cria esse cache para que o processo de carregamento do aplicativo seja mais rápido.

Caso não saiba o que é cache, clique aqui para a explicação básica e aqui para uma explicação mais completa.

Dalvik Cache sendo gerado no boot inicial.
Android Kitkat 4.4


E DEODEX?
Basicamente quando a ROM não tem ODEX, digamos uma rom "desodexada", normal.

Porque fazemos ODEX na ROM?
Bem, quando você faz ODEX na ROM, você evita que o sistema precise criar todo o Dalvik Cache, já que ele seria criado pelo Android (converter o dex para odex e coloca-lo na partição data) e esse processo já foi feito por você.

Uma coisa a ser notada. quando você "odexa" sua ROM, o arquivo classes.dex é deletado de dentro do apk, só fica o .odex do lado do app do sistema (diretório /system/app por exemplo) o que não acontece quando o Dalvik Cache é gerado automaticamente. E sim, Odex nada mais é que o Dalvik Cache pré-carregado do lado do apk.

Outro ponto interessante é que os arquivos de cache do dalvik que seriam criados na partição data (sua partição de usuário) não precisarão ser criados, já que eles já estão no sistema (partição somente leitura do sistema) Fazendo com que você tenha um pouco mais de memória de usuário livre para uso. 

Detalhe importante, apenas o boot inicial é melhorado, os boots subsequentes continuam em sua velocidade normal, mesmo com a ROM odexada.

Isso é desconhecido por muitos. Alguns desenvolvedores e usuários pensam que todos os boots serão mais rápidos depois do odex, o que não é verdade. Um mito foi criado em torno dessa técnica e algumas pessoas até preferem ROMs odexadas por acharem que terão um ganho significativo na performance.

É recomendável odexar sua ROM?
Eu, Jonny Paes NÃO RECOMENDO QUE O DESENVOLVEDOR INICIANTE FAÇA ODEX NA ROM.
Por que?

1) Quando você odexa sua ROM, fica impossível descompilar o app com qualquer programa simples como o apktool, já que ele precisa do classes.dex para descompilar, arquivo esse que é deletado no processo de ODEX. Isso exige que você converta o odex para dex, coloque dentro do apk e descompile. Qualquer edição do apk se torna uma dor de cabeça imensa para ser feita. Para um desenvolvedor que acaba de criar sua ROM e faz constantes mudanças no sistema, isso vai fazer muito tempo ser perdido por edição. Só faça odex em apps que você sabe que não vai precisar editar

2) O arquivo .odex contém informações DO SEU SISTEMA, ou seja, copiar apk + odex de outro smartphone e tentar colocar no seu, pode dar erro. Salvo arquiteturas similares, como armv7 ou armv8.

3) Alguns apps do sistema não funcionam quando odexados. Você terá que descobrir quais deles não funcionam e deixar apenas esses "deodexados".

4) Se você for um usuário e fizer odex na ROM, não verá absolutamente nenhuma melhora em nada do seu aparelho, já que o primeiro boot já foi feito e o Dalvik Cache já foi gerado.

Informações extras
1) Arquivos do framework (.jar) também podem ser odexados
2) Os odex ficam na mesma pasta que o apk do sistema (Kitkat ou menor) e mantém o mesmo nome
/system/app/SystemUI.apk
/system/app/SystemUI.odex

No lollipop ou superior, eles ficam dentro de uma pasta extra
/system/app/SystemUI/SystemUI.apk
/system/app/SystemUI/SystemUI/arm/SystemUI.odex

3) Quando o sistema gera o Dalvik Cache, embora seja um ODEX (ou seja, um dex otimizado), a sua extensão contunua sendo exibida como .dex na partição Data.

4) Existe uma troca viável ao Odexar a sua rom. Caso sua rom seja odexada, a memória de usuário que seria usada para criar o dalvik cache, agora está sendo usada pelo sistema. Isso garante que o usuário final tenha mais memória disponível para uso.

Conclusão
Você não precisa de ODEX para fazer sua rom se destacar das outras, criei duas categorias para isso, ROMs e Otimizando.





4 comentários:

  1. Bom artigo. Você sabe me dizer onde fica, ou o que define quais aplicativos há instalado? E como definir manualmente um app como oculto para qualquer launcher?. Vejo apps em /system/apps que não aparecem no launcher e outros que aparecem, como posso fazer isso manualmente?

    ResponderExcluir
  2. Existe problema em desistalar apps odex?

    ResponderExcluir

Todos os comentários são monitorados. Comentários ofensivos serão removidos e os respectivos usuários banidos.