将android应用程序与akka远程服务器连接

将android应用程序与akka远程服务器连接,android,akka,Android,Akka,我正在用android平台构建一个应用程序。将设计一个服务器端akka应用程序,该应用程序将以分布式方式向android应用程序提供服务。这两个系统都设计为单独的应用程序。是否可以将akka远程服务器与android应用程序连接起来。请帮助我,因为我对AKKA和Android都是新手。 < P>我不确定你是否在考虑使用AKKA远程处理协议,但是如果是我,我会考虑查看优秀的HTTP+REST库喷雾()。我在这个图书馆里玩过,它很光滑。它与Akka集成良好,允许您为您的服务提供RESTAPI。作为奖

我正在用android平台构建一个应用程序。将设计一个服务器端akka应用程序,该应用程序将以分布式方式向android应用程序提供服务。这两个系统都设计为单独的应用程序。是否可以将akka远程服务器与android应用程序连接起来。请帮助我,因为我对AKKA和Android都是新手。

< P>我不确定你是否在考虑使用AKKA远程处理协议,但是如果是我,我会考虑查看优秀的HTTP+REST库喷雾()。我在这个图书馆里玩过,它很光滑。它与Akka集成良好,允许您为您的服务提供RESTAPI。作为奖励,使用REST还可以让您的服务轻松地与Android前端以外的东西集成

我已经包括了几个链接作为起点。关于为Android应用程序编写REST客户端的Google 2010 I/O演讲特别有趣:


你可以这样做,但你会受苦的

您必须能够从android应用程序访问akka remote和依赖项(netty、scala)的类定义。这可能会有问题,因为依赖项的总和超过65536个方法,这是Dalviks cap。(也就是说,apk中的
classes.dex
文件的方法定义不能超过65536)

好了,主要有三种方法:

  • 将依赖项拆分为单独的APKLIB,并使您的apk依赖于这些APKLIB。
    • 我真的不能推荐这个,因为我还没试过
  • 将依赖项拆分为单独的classes.dex文件,您可以通过编程方式从应用程序加载这些文件。
    • 可能可行。从来没有试过
  • 在打包类之前运行proguard.dex
    • 您必须与proguard进行斗争才能正确配置,并且您可能会遇到奇怪的运行时故障。我的配置发布在下面
  • 一旦在android设备上启动并运行akka remote,您就可以连接到服务器,如文档中的示例所示。但是,请记住:

    • Android设备的IP在启动时可能可用,也可能不可用,因此您可能不想让akka配置的这部分保持动态(我自己还没有这样做)
    • 您的Android设备的IP可能无法从服务器访问。因此,如果您进入服务器需要回叫客户机的状态,它将永远不会成功
    My proguard.cfg(有些行是不需要的-还没有弄清楚是哪一行):


    祝你好运。

    在Android上使用Spray,你也可能会遇到上述问题。这方面运气好吗?我一直无法让Spray在Android上工作,也找不到任何其他人这样做的证据。
    -dontoptimize
    #-optimizationpasses 2
    -dontobfuscate
    -dontpreverify
    -dontskipnonpubliclibraryclassmembers
    -dontskipnonpubliclibraryclasses
    -dontnote **
    -verbose
    
    -keep class com.typesafe.config.Config { *; }
    -keep class com.typesafe.config.ConfigFactory { *; }
    -keep class org.slf4j.Logger { *; }
    -keep class org.slf4j.LoggerFactory { *; }
    
    -keepclassmembers enum * {
        public static **[] values();
        public static ** valueOf(java.lang.String);
    }
    
    #Scala
    -dontwarn scala.**
    
    -keepclassmembers class * {
          ** MODULE$;
    }
    
    -keep class scala.Option
    -keep class scala.Function1
    -keep class scala.PartialFunction
    #https://issues.scala-lang.org/browse/SI-5397
    -keep class scala.collection.SeqLike {
        public protected *;
    }
    -keep class scala.Tuple*
    
    -keepclasseswithmembers public class * {
        public static void main(java.lang.String[]);
    }
    
    -keep class * implements org.xml.sax.EntityResolver
    
    -keepclassmembers class * {
        ** MODULE$;
    }
    
    -keepclassmembernames class scala.concurrent.forkjoin.ForkJoinPool { *; }
    
    -keepclassmembernames class scala.concurrent.forkjoin.ForkJoinWorkerThread {
        int base;
        int sp;
        int runState;
    }
    
    -keepclassmembernames class scala.concurrent.forkjoin.ForkJoinTask {
        int status;
    }
    
    -keepclassmembernames class scala.concurrent.forkjoin.LinkedTransferQueue { *; }
    
    #Akka
    -dontwarn org.jboss.netty.logging.**
    -dontwarn org.osgi.**
    -dontwarn javax.servlet.**
    #-dontwarn org.jboss.netty.channel.socket.http.**
    
    ## Unsafe is there at runtime
    -dontwarn sun.misc.Unsafe
    -keep class sun.misc.Unsafe{
        *;
    }
    
    -keep class akka.** { *; }
    
    -keep class com.google.protobuf.GeneratedMessage {
        *;
    }
    -keep class org.javatuples.** { *; }
    -keep class org.jboss.**
    
    -dontwarn org.jboss.netty.handler.codec.marshalling.**
    -dontwarn org.jboss.netty.channel.socket.nio.**
    -dontwarn org.jboss.netty.handler.codec.compression.JdkZlibEncoder
    -dontwarn org.jboss.netty.handler.codec.spdy.SpdyHeaderBlockZlibCompressor
    -dontwarn org.jboss.netty.channel.socket.http.HttpTunnelingServlet
    -dontwarn org.jboss.modules.**
    -dontwarn __redirected.**
    -dontwarn org.slf4j.LoggerFactory
    -dontwarn org.slf4j.MarkerFactory
    -dontwarn org.slf4j.MDC
    -dontwarn org.slf4j.impl.AndroidLogger
    -dontwarn org.slf4j.impl.AndroidLoggerFactory