2012-04-28 68 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其使用)