it-swarm-pt.tech

Quais são os arquivos ODEX no Android?

Depois de alguns aplicativos Android instalados, descobri que ele será alterado para o arquivo odex (não apk) no smartphone. Como isso acontece? Quem pode me ensinar, estou muito interessado nisso.

68
user1253435

O artigo do blog está quase certo, mas não completo. Para ter uma compreensão completa do que um arquivo odex faz, você precisa entender um pouco sobre como os arquivos de aplicativo (APK) funcionam.

Aplicações são basicamente arquivos Zip glorificados. O código Java é armazenado em um arquivo chamado classes.dex e este arquivo é analisado pela JVM Dalvik e um cache do arquivo classes.dex processado é armazenado no cache Dalvik do telefone.

Um odex é basicamente uma versão pré-processada de classes.dex de uma aplicação que está pronta para execução para Dalvik. Quando uma aplicação é odexada, o classes.dex é removido do arquivo APK e não escreve nada no cache do Dalvik. Um aplicativo que não é odexed acaba com 2 cópias do arquivo classes.dex - o empacotado no APK e o processado no cache do Dalvik. Também demora um pouco mais para iniciar a primeira vez, já que a Dalvik precisa extrair e processar o arquivo classes.dex.

Se você está construindo uma ROM personalizada, é uma boa idéia otimizar seus arquivos JAR de estrutura e os aplicativos de estoque para maximizar o espaço de armazenamento interno para aplicativos instalados pelo usuário. Se você quer tema, então simplesmente deodex -> aplique seu tema -> reodex -> release.

Para realmente deodex, use small e baksmali:

http://code.google.com/p/smali/wiki/DeodexInstructions

70
Nathan Strong

Este artigo do Blog explica os componentes internos dos arquivos ODEX:

O QUE ÉIS UM ARQUIVO DE ODEX?

No sistema de arquivos Android, os aplicativos vêm em pacotes com a extensão .apk. Esses pacotes de aplicativos ou APKs contêm determinados arquivos .odex cuja suposta função é economizar espaço. Esses arquivos "odex" são, na verdade, coleções de partes de um aplicativo que são otimizadas antes da inicialização. Isso acelera o processo de inicialização, pois pré-carrega parte de um aplicativo. Por outro lado, também dificulta a invasão desses aplicativos porque uma parte da codificação já foi extraída para outro local antes da execução.

17
theomega

ART

No ART, os arquivos .odex contêm:

contém código compilado AOT para métodos no APK.

de acordo com os documentos: http://web.archive.org/web/20170909233829/https://source.Android.com/devices/tech/dalvik/configure

Além disso, eles parecem ser bibliotecas compartilhadas regulares, desde que você obtenha qualquer aplicativo e verifique:

file /data/app/com.Android.appname-*/oat/arm64/base.odex

diz:

base.odex: ELF shared object, 64-bit LSB arm64, stripped

e aarch64-linux-gnu-objdump -d base.odex parece funcionar e dar alguma desmontagem significativa (mas também algumas seções de lixo).