2016-05-05 3 views
1

APKファイルにはinterface IAクラスがあります。 IAのimplementation MAを含むjarファイルを作成します。その瓶はGlobal classB classです。 jarはデータディレクトリからDexclassloaderで動的にロードされます。dex jarを動的にロードするときにjava.lang.NoSuchMethodErrorが発生するのはなぜですか?

interface IA { 
    test(); 
} 

class Global { 
    IA instance; //refer to MA instance. 
} 

class B { 
    .... 
    instance.test() ; // throw NoSuchMethodError 
.... 
} 

ただし、インスタンスのテストメソッドをリフレクションで呼び出すことは可能です。

なぜですか?確かに私はClassloaderやDexClassloaderのいくつかのプリンシパルに精通していません。誰かが私のために説明を与えることができますか?ありがとう

+0

このメソッドは実装されていません。インターフェイスはメソッドの宣言を持っています。そしてあなたは途中で反射を使用していません。 – Batty

+0

@Batty Instanceは、apkクラスのインタフェースIAを実装するMAインスタンスです。 –

答えて

0

私はあまりにもNoSuchMethodエラーがありました。何らかのテストをした後、JAR内のDEXファイルの名前がclasses.dexではないことがわかりました。 アプリケーションがクラスの新しいインスタンスを作成できたということは、必ずしもDEXが正しくロードされたことを意味するわけではありません。空のJAR(つまり7-ZIPを介してすべての内部ファイルを削除)私のクラスをインスタンス化する(私はそれが0のパラメータを取得するデフォルトのコンストラクタでのみ動作すると思うが)。

関連する問題