Файлы OAT на других устройствах, использующих ту же архитектуру, одинаковы?

Файлы OAT на других устройствах, использующих ту же архитектуру, одинаковы? Если это не то же самое, можете ли вы сказать мне, почему? Спасибо.

Еще один вопрос, мне интересно, если файлы ODEX одинаковы на других устройствах, использующих ту же архитектуру

1 ответ

Решение

Скорее всего нет. Файл oat сильно зависит от структуры устройства, на котором он был скомпилирован. Любые различия в любом из классов инфраструктуры, используемых файлом dex, могут привести к тому, что файлы oat будут другими.

Аналогично с делом odex, с которым я немного знаком и могу привести более конкретный пример.

Одна из конкретных оптимизаций, выполняемых в файле odex, предназначена для вызовов виртуальных методов, чтобы заменить детали вызываемого метода (класс, имя, параметры, тип возвращаемого значения) простым vtable индексом вызываемого метода.

Структура vtable для класса, конечно, зависит от всех виртуальных методов, определенных в классе. Так, например, есть класс A, который обычно имеет 5 виртуальных методов, но один из OEM-производителей добавляет 6-й метод (например, может быть, защищенный "вспомогательный" метод, что угодно), тогда у него есть возможность изменять индексы vtable все остальные методы, что означает, что любой файл odex, который ссылается на этот класс, вероятно, будет отличаться между двумя устройствами.

Другие вопросы по тегам