【问题标题】:Remote akka actors on android?Android上的远程akka演员?
【发布时间】:2012-05-09 00:10:46
【问题描述】:

我正在尝试像往常一样使用 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)

【问题讨论】:

  • android客户端部署akka jar了吗? no class def 异常似乎表明它不是。
  • 我使用我的 build.sbt 文件来包含 akka,并且应用程序工作正常,直到我请求连接到远程参与者。 //Akka 解析器 += "Typesafe Repository" at "repo.typesafe.com/typesafe/releases" libraryDependencies += "se.scalablesolutions.akka" % "akka-actor" % "1.3" libraryDependencies += "se.scalablesolutions.akka" % "akka-演员”%“1.3”图书馆依赖+=“se.scalablesolutions.akka”%“akka-remote”%“1.3”图书馆依赖+=“se.scalablesolutions.akka”%“akka-stm”%“1.3”

标签: android scala sbt-android-plugin


【解决方案1】:

我让它与 Akka 2.0.2 和 Android 2.3.3 一起使用。你需要做的是:

  1. Akka jar 在同一路径中包含多个 reference.conf 的解决方法,这是 proguard 不喜欢的。为此,请从 jar 中删除 reference.conf,而是包含一个自定义 reference.conf,其中包含 jar 中 both 文件中的配置。

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

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

【讨论】:

    【解决方案2】:

    所有东西都需要部署在一个 jar 中。有关将 Scala 部署到 android 的更多详细信息,请参阅Is using Scala on Android worth it? Is there a lot of overhead? Problems?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-08
      • 1970-01-01
      • 2014-03-16
      • 2021-08-24
      相关资源
      最近更新 更多