Имеет ли среда выполнения Android ART те же ограничения по методу, что и Dalvik?

Имеет ли среда выполнения Android ART те же ограничения по методу, что и Dalvik? В настоящее время существует ограничение в 64 тыс. Методов в основном файле dex.

2 ответа

Решение

Проблема не в среде выполнения Dalvik и не в формате файла DEX, а в текущем наборе инструкций Dalvik. В частности, различные методы вызова методов, которые выглядят так:

invoke-kind {vC, vD, vE, vF, vG}, meth@BBBB

B: method reference index (16 bits)

Вы можете ссылаться на очень большое количество методов в DEX-файле, но вы можете вызвать только первые 65536, потому что это все пространство, которое есть в инструкции вызова метода.

Я хотел бы отметить, что ограничение на количество методов, на которые ссылаются, а не количество определенных методов. Если в вашем DEX-файле есть только несколько методов, но вместе они вызывают 70000 различных внешних методов, вы превысите предел.

Один из способов исправить это - добавить дополнительные инструкции, которые используют более широкие ссылки на методы. Подход, названный "jumbo opcodes", был реализован и выпущен в Android 4.0 (ICS), но так и не был полностью введен в действие, а позже был удален из дерева. (Я иногда вижу здесь сообщения с сообщениями об ошибках от "dx", которые ссылаются на jumbo ops, или от разработчиков, которые наткнулись на них.)

Обратите внимание, что это не проблема, решаемая взломом Facebook. Это связано с буфером фиксированного размера для хранения метаданных класса / метода / поля. Там нет конкретного метода ограничения там; Вы можете уничтожить буфер, имея много полей.

Насколько я понимаю, текущая реализация ART обрабатывает тот же набор инструкций, что и Dalvik, поэтому ситуация не будет отличаться.

Анвар Гулум сказал в этом эпизоде ​​Backstage для разработчиков Android, что они не собираются исправлять байт-код в ближайшем будущем.
Вместо этого, начиная с Android L, они будут изначально поддерживать multi-dex, сворачивая все файлы dex (из APK) в один oat-файл.

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