2016-07-08 10 views
1

dexファイル(classesN.dex)が別のclassesN.dexファイル内のメソッドをどのように参照しているかを理解することに興味があります。Multidexファイル形式

標準のdexレイアウトでは、クラス、メソッド、タイプなどの定義がすべて異なるテーブルにあります。動的にリンクされているもの(Androidフレームワークのものなど)には、メソッドプロトタイプは含まれていますが、コードデータはありません。 multidexの設定では、各classesN.dexにクラス実装のセットが含まれており、他のdexファイルで実装されているメソッドは単に動的リンクされた呼び出しと同じ方法で含まれているだけですか?すなわち

classes.dexニーズが方法classes1.dexを参照する場合、それはclasses.dex内プロトタイプとしてその方法を含み、その後、classes1.dexでの実装を含むであろうか?

+0

こんにちは、あなたはこれに対する答えを見つけましたか?私も知りたいです:)(そうでなければ、私はこれを調べます:D) – daemontus

+0

はい。私は答えを加えました。 –

+0

ありがとう、私のための少ない掘り出し物:) – daemontus

答えて

1

私はこの問題を解決しました。マルチレイアウトでは、関連するメソッドとクラス定義が各dexファイルに含まれています。たとえば、classes.dexfoo()からclasses1.dexまでを参照する場合は、classes.dexのメソッドテーブル内のfoo()のメソッドテーブルに関連するエントリが含まれます。しかし、foo()の実装はclasses1.dexに表示されます。これは、通常foo()がアプリで使用するライブラリのエントリのようなものであるために機能します。そのライブラリのエントリポイントは、fooによって呼び出されるすべてのメソッドなしで使用できます。 classes.dexでは、それが動的にリンクされたAndroid標準ライブラリの一部であるかのように、対応するコード項目なしでfooが定義されます。