2016-07-08 2 views
1

Мне интересно узнать, как файл dex (classesN.dex) ссылается на методы в другом файле classesN.dex.Формат файла Multidex

В стандартном макете dex у вас есть все определения класса, метода, типа и т. Д. В разных таблицах. Вещи, которые динамически связаны (например, из платформы Android), просто включают в себя прототипы методов, но не содержат данных кода. Верно ли, что в multidex-установке каждый классN.dex содержит набор реализаций классов, а методы, реализованные в других файлах dex, просто включаются так же, как и динамически связанные вызовы?

Другими словами, если classes.dex потребности ссылаться на метод classes1.dex, он будет включать в себя этот метод в качестве прототипа в classes.dex, а затем включить его реализацию в classes1.dex?

+0

Привет, вы нашли ответ на это? Я также хотел бы знать :) (если нет, я рассмотрю следующее: D) – daemontus

+0

Да. Я добавил ответ. –

+0

Спасибо, меньше копать для меня :) – daemontus

ответ

1

В итоге я решил решить этот вопрос: выясняется, что в мультидексельном макете в каждый файл dex включены соответствующие определения методов и классов. Например, если classes.dex ссылается на методы foo() от classes1.dex, он будет содержать соответствующую запись в таблице методов для foo() в таблице методов classes.dex. Но реализация foo() появится в classes1.dex. Это работает, потому что foo() обычно что-то вроде ввода библиотеки, используемой приложением. Точки входа этой библиотеки могут использоваться без всех методов, вызванных foo. В classes.dex, foo будет определен без соответствующего элемента кода, точно так же, как если бы он был частью динамически связанной стандартной библиотеки Android.

Смежные вопросы