1

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;'

これを引き起こす可能性のあるアイデアはありますか?

4

1 に答える 1

0

RoboGuice の 2.0-SNAPSHOT にアップグレードすると、RoboApplication を使用する必要がなくなり、すべてが自動的にバインドされます。バインド方法の詳細については、AnDevCon 2 での RoboGuice に関する Mike Burtons プレゼンテーションのスライドと、wiki の 2.0 セクションを参照してください。

メーリング リストに投稿したように、dedexer を使用して apk をチェックアウトし、クラスが実際に Proguard によって削除されたか、次のステップとして見つからないように名前が変更されたかどうかを確認してください。

于 2011-11-10T19:03:24.480 に答える