クラス A はクラス B を参照します。これらは同じパッケージ内にあります。したがって、A は B をインポートしません。また、コンパイル エラーは表示されません。しかし、クラス オブジェクトを取得して ClassA.getDeclaredMethods を呼び出すと、例外が発生します。
java.lang.NoClassDefFoundError: xxx.xxx.B ?
しかし、クラス B の親インターフェイスを A にインポートし、A のメソッドの戻り値の型を B から B の親インターフェイスに同時に明確に変更すると。大丈夫です。
2 つの Android デバイスを試してみましたが、両方ともエラーが発生しました。
なんで?
PS: ログからこの理由を得ました
04-21 21:31:25.005 W/dalvikvm(21707): Class resolved by unexpected DEX: Lxxx/xxxx/xxxx/methods/FieldsConfig;(0x42a18bd8):0x76e66000 ref [Lxxx/xxxx/xxxx/ITelephonyManagerInterface$IFieldsConfig;] Lxxx/xxxx/xxxx/ITelephonyManagerInterface$IFieldsConfig;(0x42a18bd8):0x76d17000
04-21 21:31:25.005 W/dalvikvm(21707): (Lxxx/xxxx/xxxx/methods/FieldsConfig; had used a different Lxxx/xxxx/xxxx/ITelephonyManagerInterface$IFieldsConfig; during pre-verification)
04-21 21:31:25.005 W/dalvikvm(21707): Link of class 'Lxxx/xxxx/xxxx/methods/FieldsConfig;' failed
2 つの dex から 1 つのクラスをロードします。
compile project(":base")
androidTestCompile project(':AAAA') // only androidTest
androidTestCompile project(':BBBB')
androidTestCompile project(':CCCC') {
exclude project(":base") //how I exclude one project??
}//only androidTest
ここで、別の質問が来ます。project(":base") を androidTestCompile project(':CCCC') から除外するにはどうすればよいですか?