2016-07-08 20 views
1

Ich bin daran interessiert zu verstehen, wie eine Dex-Datei (classesN.dex) Methoden in einer anderen classesN.dex Datei verweist.Multidex Dateiformat

In einem Standard-dex-Layout haben Sie alle Definitionen für Klasse, Methode, Typ usw. in verschiedenen Tabellen. Bei dynamisch verknüpften Objekten (z. B. aus dem Android-Framework) sind lediglich die Methodenprototypen enthalten, jedoch keine Codedaten. Stimmt es, dass in einem multidex-Setup jeder classesN.dex eine Menge von Klassenimplementierungen enthält und Methoden, die in anderen dex-Dateien implementiert sind, nur auf die gleiche Weise wie dynamisch verknüpfte Aufrufe enthalten sind?

Mit anderen Worten, wenn classes.dex Bedarf ein Verfahren classes1.dex zu verweisen, wird es diese Methode als Prototyp innerhalb classes.dex, umfasst und umfassen dann ihre Umsetzung in classes1.dex?

+0

Hallo, hast du eine Antwort darauf gefunden? Ich würde auch gerne wissen :) (wenn nicht, werde ich in das schauen: D) – daemontus

+0

Ja. Ich habe eine Antwort hinzugefügt. –

+0

Danke, weniger graben für mich :) – daemontus

Antwort

1

Ich löste diese Frage: Es stellt sich heraus, dass in einem Multidex-Layout die relevanten Methoden- und Klassendefinitionen in jeder dex-Datei enthalten sind. Wenn zum Beispiel classes.dex die Methoden foo() von classes1.dex referenziert, enthält es einen relevanten Eintrag in der Methodentabelle für foo() innerhalb der Methodentabelle classes.dex. Aber die Implementierung von foo() wird in classes1.dex erscheinen. Das funktioniert, weil foo() normalerweise so etwas wie der Eintrag einer von der App verwendeten Bibliothek ist. Die Einstiegspunkte dieser Bibliothek können ohne alle von foo aufgerufenen Methoden verwendet werden. In classes.dex wird foo ohne einen entsprechenden Code definiert, als wäre es Teil der dynamisch verknüpften Android-Standardbibliothek.