Po android
zainstalowaniu niektórych aplikacji stwierdziłem, że zmieni się na odex
plik (nie apk
) w smartfonie. Jak to się dzieje? Kto może mnie nauczyć, bardzo mnie to interesuje.
źródło
Po android
zainstalowaniu niektórych aplikacji stwierdziłem, że zmieni się na odex
plik (nie apk
) w smartfonie. Jak to się dzieje? Kto może mnie nauczyć, bardzo mnie to interesuje.
Artykuł na blogu jest w większości poprawny, ale nie kompletny. Aby w pełni zrozumieć, co robi plik odex, musisz trochę zrozumieć, jak działają pliki aplikacji (APK).
Aplikacje są w zasadzie gloryfikowanymi archiwami ZIP. Kod java jest przechowywany w pliku o nazwie classes.dex i ten plik jest analizowany przez maszynę Dalvik JVM, a pamięć podręczna przetworzonego pliku classes.dex jest przechowywana w pamięci podręcznej Dalvik telefonu.
Odex jest w zasadzie wstępnie przetworzoną wersją class.dex aplikacji, która jest gotowa do wykonania dla Dalvik. Kiedy aplikacja jest odexed, class.dex jest usuwany z archiwum APK i nie zapisuje niczego w pamięci podręcznej Dalvik. Aplikacja, która nie jest odexed, kończy się z 2 kopiami pliku classes.dex - spakowaną w pliku APK i przetworzoną w pamięci podręcznej Dalvik. Pierwsze uruchomienie zajmuje trochę więcej czasu, ponieważ Dalvik musi wyodrębnić i przetworzyć plik classes.dex.
Jeśli tworzysz niestandardową pamięć ROM, naprawdę dobrym pomysłem jest odeksowanie zarówno plików JAR platformy, jak i aplikacji magazynowych, aby zmaksymalizować wewnętrzną przestrzeń dyskową dla aplikacji zainstalowanych przez użytkownika. Jeśli chcesz motywować, po prostu deodex -> zastosuj swój motyw -> reodex -> zwolnij.
Aby faktycznie deodeksować, użyj small i baksmali:
Ten artykuł na blogu wyjaśnia wewnętrzne funkcje plików ODEX:
źródło
APKs contain certain .odex files
?!SZTUKA
Zgodnie z docs: http://web.archive.org/web/20170909233829/https://source.android.com/devices/tech/dalvik/configure o
.odex
pliku:Co więcej, wydają się być zwykłymi bibliotekami współdzielonymi, ponieważ jeśli masz jakąś aplikację, i sprawdź:
file /data/app/com.android.appname-*/oat/arm64/base.odex
to mówi:
base.odex: ELF shared object, 64-bit LSB arm64, stripped
i
aarch64-linux-gnu-objdump -d base.odex
wydaje się działać i daje jakiś znaczący demontaż (ale także niektóre sekcje śmieci).źródło