NotesList デモから始めて、Android で Scala を評価しています。NotesLiveFolder.javaファイルを Scala に相当するものに問題なく置き換えることができました。
次に、Roboguice を導入NotesListApplication.javaし、Guice モジュールをセットアップする単純なものを作成し、NoteEditor.javaアクティビティにリソースを正常に注入しました。
最後に、同等の Scala に置き換えようとするとNotesListApplication.java、アプリケーションの起動が完了する前に次のランタイム エラーが発生します。
java.lang.ClassNotFoundException: com.example.android.notepad.NotesListApplication in loader dalvik.system.PathClassLoader[/data/app/com.example.android.notepad-1.apk]
完全な Eclipse プロジェクトとソースを含むGoogle Code プロジェクトを作成しました。元の機能NotesListApplication.javaは次のとおりです。
package com.example.android.notepad;
import java.util.List;
import roboguice.application.RoboApplication;
import com.google.inject.Module;
public class NotesListApplication extends RoboApplication {
private Module module = new BindEverything();
public void setModule(Module module) {
this.module = module;
}
@Override
protected void addApplicationModules(List<Module> modules) {
modules.add(module);
}
}
エラーの原因となるScalaの同等物は次のとおりです。
package com.example.android.notepad
import roboguice.application.RoboApplication
class NotesListApplication extends RoboApplication {
val module : Module = new BindEverything()
override protected def addApplicationModules(modules:java.util.List[Module] ) {
modules.add(module)
}
}
ScalaIDE プラグインを使用して Eclipse でビルドしています。私はtreeshaker/proguard/etcを実行していません。
逆アセンブリは、期待どおりの Scala クラスを示しています。
Class descriptor : 'Lcom/example/android/notepad/NotesLiveFolder;'
...
Class descriptor : 'Lcom/example/android/notepad/NotesListApplication;'
これを引き起こす可能性のあるアイデアはありますか?