Scala + Android + Roboguice: исключение ClassNotFoundException в загрузчике - PullRequest
1 голос
/ 10 ноября 2011

Я оцениваю Scala на Android, начав с демонстрации NotesList.Мне удалось без проблем заменить файл NotesLiveFolder.java его эквивалентом Scala.

Затем я представил Roboguice, создав простой NotesListApplication.java, который настраивает модули Guice, и успешно ввел ресурс в NoteEditor.java активность.

Наконец, когда я пытался заменить NotesListApplication.java его эквивалентом Scala, я получаю следующую ошибку времени выполнения до завершения загрузки приложения:

java.lang.ClassNotFoundException: com.example.android.notepad.NotesListApplication in loader dalvik.system.PathClassLoader[/data/app/com.example.android.notepad-1.apk]

Я создал проект Google Code , содержащий полный проект 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)
    }
}

Я строю в Eclipse с помощью плагина ScalaIDE.Я не работаю с Treehaker / Proguard / и т.д.

Разборка показывает классы Scala, как и ожидалось:

Class descriptor : 'Lcom/example/android/notepad/NotesLiveFolder;'

...

Class descriptor : 'Lcom/example/android/notepad/NotesListApplication;'

Любые идеичто может вызвать это?

1 Ответ

0 голосов
/ 10 ноября 2011

Обновите до 2.0-SNAPSHOT RoboGuice, и тогда вам не нужно будет использовать RoboApplication, и все это автоматически связывается. Чтобы узнать больше о связывании, ознакомьтесь со слайдами из презентаций Майка Бертона о RoboGuice на AnDevCon 2 и ознакомьтесь с разделом 2.0 на вики .

Как я разместил в списке рассылки, возможно, проверьте apk с dedexer и посмотрите, действительно ли класс был удален, например. Proguard или переименован, чтобы его нельзя было найти в качестве следующего шага.

...