Android ART – Использование файла .oat в /dalvik-cache/?

играя с Android ART и «родным» файлом кода .oat/.elf, который создается в процессе установки приложения, я заметил кое-что странное.

Насколько я понимаю, если устройство использует ART (Android >= 5.0), приложение запустится с скомпилированным файлом oat (/data/dalvik-cache/arm64/).

Вот почему я был немного удивлен, когда проверял используемые fd приложения и не нашел там файла. Там указан только обычный apk (/data/app//base.apk).

Проверьте этот вывод моего "ls -l /proc/PID/fd"

введите здесь описание изображения

Вот я и подумал, может быть, его просто нет в списке. Поэтому я самостоятельно заменил файл oat этого приложения, скомпилировав другой class.dex с помощью инструмента dex2oat.

Таким образом, даже после изменения файла приложение запускается нормально, без каких-либо странных сообщений или ошибок (также в logcat).

Чем это объясняется? Каков подробный процесс Android при запуске приложения в ART?

Я надеюсь, что кто-то может прояснить это для меня. Большое спасибо.


person B.S4989    schedule 19.11.2015    source источник
comment
вы можете видеть, что base.odex отображается в памяти, если вы распечатаете вывод файла maps!   -  person Paschalis    schedule 01.12.2015


Ответы (1)


Основываясь на комментарии @Paschalis, я исследовал здесь, и файл овса действительно отображается в памяти на устройствах Android 5.0 (эмулятор):

a6af4000-a6af9000 r--p 00000000 1f:01 7366 /data/dalvik-cache/x86/data@[email protected]@[email protected]

Проверить через:

cat /proc/<PID>/maps | grep dex

К сожалению, это уже не так для устройств Android 6.0 (Nexus 5 и arm-Emulator).

Файл odex находится в папке /data/app/<APP>/oat/<ARCHITECTURE>/ как «base.odex».

/data/app/app.app.works-1/oat/arm/base.odex

Я до сих пор не нашел для этого действующую ссылку, она основана на экспериментах и ​​наблюдениях.

person sweisgerber.dev    schedule 22.01.2016
comment
спасибо, приятно, у меня те же проблемы с файлом .odex. Когда я загрузил apk после этого, я получил журнал сбоев в игровой консоли для этой проблемы, так что как ее решить, - person Amjad Khan; 23.09.2017