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.
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.
Odpowiedzi:
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:
CZYM JEST PLIK ODEX?
W systemie plików Android aplikacje są dostarczane w pakietach z rozszerzeniem .apk. Te pakiety aplikacji lub pliki APK zawierają określone pliki .odex, których rzekomą funkcją jest oszczędność miejsca. Te pliki „odex” to w rzeczywistości zbiory części aplikacji, które są zoptymalizowane przed uruchomieniem. Takie postępowanie przyspiesza proces uruchamiania, ponieważ wstępnie ładuje część aplikacji. Z drugiej strony utrudnia również hakowanie tych aplikacji, ponieważ część kodu została już wyodrębniona do innej lokalizacji przed wykonaniem.
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:
zawiera skompilowany kod AOT dla metod w APK.
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).