我从 NotesList 演示开始评估 Android 上的 Scala。我能够毫无问题地将 NotesLiveFolder.java
文件替换为其 Scala 等效文件。
接下来,我介绍了 Roboguice,创建了一个简单的 NotesListApplication.java
来设置 Guice 模块,并成功地将资源注入(inject)到 NoteEditor.java
Activity 中。
最后,当我尝试将 NotesListApplication.java
替换为其 Scala 等效项时,在应用程序完成启动之前出现以下运行时错误:
java.lang.ClassNotFoundException:加载程序 dalvik.system.PathClassLoader 中的 com.example.android.notepad.NotesListApplication[/data/app/com.example.android.notepad-1.apk]
我创建了一个Google Code project包含完整的 Eclipse 项目和源代码。原始功能 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 中进行构建。我没有运行任何摇树机/混淆器/等。
反汇编显示了预期的 Scala 类:
类描述符:'Lcom/example/android/notepad/NotesLiveFolder;'
...
类描述符:'Lcom/example/android/notepad/NotesListApplication;'
有什么想法可能会导致这种情况吗?
最佳答案
升级到 RoboGuice 2.0-SNAPSHOT,然后您就不必使用 RoboApplication,它会自动绑定(bind)。有关如何绑定(bind)的更多信息,请查看 Mike Burton 在 AnDevCon 2 上关于 RoboGuice 的演示文稿中的幻灯片,并查看 2.0 部分 on the wiki .
就像我在邮件列表上发布的那样,也许可以使用 dedexer 检查 apk,看看该类是否确实被删除,例如由 Proguard 或重命名,以便下一步无法找到它。
关于java - Scala+Android+Roboguice : ClassNotFoundException in loader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8084614/