Androidのアプリケーションでは、存在しないクラスを参照するクラスをロードした際、次のような警告ログが出力されます:
E/dalvikvm( 4165):Could not find class 'com.example.spikeapp.library.optional.Optional', referenced from method com.example.spikeapp.library.Library.hoe
W/dalvikvm( 4165): VFY: unable to resolve new-instance 1020 (Lcom/example/spikeapp/library/optional/Optional;) in Lcom/example/spikeapp/library/Library;
D/dalvikvm( 4165): VFY: replacing opcode 0x22 at 0x0000
D/dalvikvm( 4165): DexOpt: unable to opt direct call 0x20f2 at 0x02 in Lcom/example/spikeapp/library/Library;.hoe
このログは例えば次のようなコードを実行すると出力されます:
MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
...
new Library().say();
Library.java
public class Library {
public void hoe() {
new Optional(); // Optionalクラスはクラスパス上にない
}
public void say() {
Log.d("spike", "hello!");
}
}
Optionalクラスが存在しなくてもLibrary#say()の実行には影響がないため実行自体は意図通りに行なわれますが、もしログに余計な情報を出力させたくないのであれば、例えば次のように存在しないクラスを参照するコードを別クラスに分割して間接的に参照するようにすると良いでしょう:
MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
...
new Library().say();
Library.java
public class Library {
public class Library {
public void hoe() {
new OptionalLibrary().hoe(); // Optionalクラスを直接参照しないようにする
}
public void say() {
Log.d("spike", "hello!");
}
}
OptionalLibrary.java
public class OptionalLibrary {
public void hoe() {
new Optional();
}
}