2012-04-28 70 views
4

我试图做一个简单的远程连接到使用akka的演员,正如我通常做的,但我确定有什么我需要做的从android使用akka任何人都可以帮助吗?Android上的远程akka演员?

import akka.actor.Actor.remote 

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

我得到TE以下堆栈跟踪:

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) 
+0

部署在Android客户端上的阿卡罐子?无类def例外似乎表明它不是。 – 2012-04-28 19:50:05

+0

我使用我的build.sbt文件来包含akka,并且该应用程序正常工作,直到我请求连接到远程参与者。 //阿卡 解析器+ = “类型安全库” 在 “http://repo.typesafe.com/typesafe/releases/” libraryDependencies + = “se.scalablesolutions.akka” % “阿卡-演员” % “1.3” libraryDependencies + = “se.scalablesolutions.akka” % “阿卡-演员” % “1.3” libraryDependencies + = “se.scalablesolutions.akka” % “阿卡远程” % “1.3” libraryDependencies + =“se.scalablesolutions.akka”%“akka-stm”%“1.3” – 2012-04-28 20:29:39

回答

7

我得到它与Akka 2.0.2和Android 2.3.3一起工作。你需要做的是:

  1. 解决方法是阿卡罐子包括其proguard的不喜欢相同的路径多个reference.conf。通过从jar中删除reference.conf来做到这一点,而是包括一个自定义的reference.conf,其中包括的配置,两个文件在罐子里。

  2. 配置Proguard以包含反射引用的akka​​类并忽略有关sun.misc.Unsafe的警告。我的配置:https://gist.github.com/3307987

  3. 升级的Netty 3.3.1(修复问题sun.misc.Unsafe其使用)