Im trying to make a simple remote connection to a actor using akka as I normally do but Im sure there something else I need to do when using akka from android can anyone help?
import akka.actor.Actor.remote
// Establish Connection to Remote Actor
val server = remote.actorFor(remoteActorID, rIP, rPort)
I get te following stack trace:
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)
I got it working with Akka 2.0.2 and Android 2.3.3. What you need to do is:
Workaround that Akka jars include multiple reference.conf at the same path which proguard does not like. Do this by removing the reference.conf from the jars but instead including a custom reference.conf which includes config from both files in the jars.
Configure Proguard to include classes from akka that are referenced by reflection and to ignore warnings about sun.misc.Unsafe. My config: https://gist.github.com/3307987
Upgrade Netty to 3.3.1 (fixes problems with its usage of sun.misc.Unsafe)
Everything needs to be deployed In a single jar. See Is using Scala on Android worth it? Is there a lot of overhead? Problems? for more details of deploying Scala to android.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With