5

私は通常のように akka を使用してアクターへの単純なリモート接続を確立しようとしていますが、Android から akka を使用するときに他に何かする必要があると確信していますか?

import akka.actor.Actor.remote

// Establish Connection to Remote Actor                
val server = remote.actorFor(remoteActorID, rIP, rPort)

次のスタック トレースを取得します。

04-28 09:57:13.114: ERROR/AndroidRuntime(18536): FATAL EXCEPTION: Thread-741
        java.lang.ExceptionInInitializerError
        at akka.actor.Actor$.remote(Actor.scala:115)
        at edu.spsu.rgoodwin.networking.api.RemoteConnection.<init>(RemoteConnection.scala:18)
        at edu.spsu.rgoodwin.csrAndroidApp.ClientConfigActivity.routerRegistration(ClientConfigActivity.scala:234)
        at edu.spsu.rgoodwin.csrAndroidApp.ClientConfigActivity$$anon$1.run(ClientConfigActivity.scala:71)
        at java.lang.Thread.run(Thread.java:856)
        Caused by: java.lang.ExceptionInInitializerError
        at akka.util.ReflectiveAccess$Remote$.<init>(ReflectiveAccess.scala:52)
        at akka.util.ReflectiveAccess$Remote$.<clinit>(ReflectiveAccess.scala)
        ... 5 more
        Caused by: akka.config.ConfigurationException: Event Handler specified in config can't be loaded [akka.event.EventHandler$DefaultListener] due to [java.lang.ClassNotFoundException: akka.event.EventHandler$DefaultListener]
        [localhost_0e3e4c40-913a-11e1-b984-660379e93466]
        at akka.event.EventHandler$$anonfun$1.apply(EventHandler.scala:231)
        at akka.event.EventHandler$$anonfun$1.apply(EventHandler.scala:223)
        at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59)
        at scala.collection.immutable.List.foreach(List.scala:45)
        at akka.event.EventHandler$.<init>(EventHandler.scala:223)
        at akka.event.EventHandler$.<clinit>(EventHandler.scala)
        ... 7 more
        Caused by: java.lang.ClassNotFoundException: akka.event.EventHandler$DefaultListener
        at java.lang.Class.classForName(Native Method)
        at java.lang.Class.forName(Class.java:217)
        at java.lang.Class.forName(Class.java:172)
        at akka.util.ReflectiveAccess$.getClassFor(ReflectiveAccess.scala:222)
        at akka.event.EventHandler$$anonfun$1.apply(EventHandler.scala:225)
        ... 12 more
        Caused by: java.lang.NoClassDefFoundError: akka/event/EventHandler$DefaultListener
        ... 17 more
        Caused by: java.lang.ClassNotFoundException: akka.event.EventHandler$DefaultListener
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
4

2 に答える 2

7

Akka2.0.2とAndroid2.3.3で動作するようになりました。あなたがする必要があるのは:

  1. Akka jarには、proguardが好まない同じパスに複数のreference.confが含まれているという回避策。これを行うには、jarからreference.confを削除しますが、代わりに、jar内の両方のファイルの構成を含むカスタムreference.confを含めます。

  2. リフレクションによって参照されるakkaのクラスを含め、sun.misc.Unsafeに関する警告を無視するようにProguardを構成します。私の設定:https ://gist.github.com/3307987

  3. Nettyを3.3.1にアップグレードします(sun.misc.Unsafeの使用に関する問題を修正します)

于 2012-08-09T21:05:07.127 に答える
3

すべてを単一の jar にデプロイする必要があります。Android で Scala を使用する価値はありますか? を参照してください。オーバーヘッドは多いですか?問題?Android への Scala のデプロイの詳細については、

于 2012-04-28T19:57:04.290 に答える