Android 上的 Akka 多参考.conf

Posted

技术标签:

【中文标题】Android 上的 Akka 多参考.conf【英文标题】:Akka on Android multiple reference.conf 【发布时间】:2014-10-24 16:18:17 【问题描述】:

我正在尝试将 akka 和 spray 添加到我的 android 应用程序(用 Scala 和 Scalaid lib 编写)。一切都应该正常,我的 ide 没有抛出任何错误。我发现一些链接解决了同样的问题,但到目前为止没有任何帮助。当我构建我的项目时:

sbt ~android:install

当我的 build.sbt 中有以下行时

apkbuildExcludes in Android += "reference.conf"

我得到了错误

08-31 08:02:45.598    7884-7884/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: at.itn.android, PID: 7884
    com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'akka'

没有它

[info] Generating dex, incremental=true
com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK reference.conf
    File 1: /home/markus/.ivy2/cache/com.typesafe.akka/akka-actor_2.11/jars/akka-actor_2.11-2.3.5.jar
    File 2: /home/markus/.ivy2/cache/com.typesafe.akka/akka-actor_2.11/jars/akka-actor_2.11-2.3.5.jar

我没有任何reference.conf(我也试过reference.conf https://github.com/akka/akka/blob/master/akka-actor/src/main/resources/reference.conf)

这是我的 build.sbt

android.Plugin.androidBuild

name := "myApp"
scalaVersion := "2.11.0"

proguardCache in Android ++= Seq(
  ProguardCache("org.scaloid") % "org.scaloid"
)

proguardOptions in Android ++= Seq(
  "-dontobfuscate",
  "-dontoptimize",
  "-dontwarn scala.collection.mutable.**",
  "-ignorewarnings",
  "-keep class scala.Dynamic"
)

apkbuildExcludes in Android += "reference.conf"

libraryDependencies ++= 
  Seq(
    "org.scaloid" %% "scaloid" % scaloidV,
    "com.typesafe.akka" % "akka-actor_2.11" % akkaV
    // ....
  )

有人可以告诉我如何让akka在android上运行吗?

【问题讨论】:

【参考方案1】:

我有一个在 android 上使用 akka 和 spray 的工作示例。看看这个。 https://github.com/anjeikatkov/android-akka-spray-example

希望,它会有所帮助。

【讨论】:

非常感谢!我花了几个小时来解决这个问题。有了你的示例代码,我终于设法让它工作了【参考方案2】:

我刚才在 scala-on-android 邮件列表中描述了一个解决方案。这是链接:https://groups.google.com/d/msg/scala-on-android/JwMQCtC2zCs/rHHg4BU55W0J。

TL;DR:主要问题似乎是错误的类加载器(您应该在 logcat 中看到警告)。我在应用程序中预加载了配置:

class MyApplication extends Application 
  ...
  val config = ConfigFactory.load()
  ...

并且还明确地将 ActorSystem 指向正确的类加载器:

val app = getApplication.asInstanceOf[MyApplication] 
val actorSystem = ActorSystem("MyActorSystem", app.config, app.getClassLoader)

希望有帮助

【讨论】:

【参考方案3】:

您应该将 akka 存储库中的“reference.conf”文件放入项目的 /src/main/resources 目录中。

【讨论】:

我的reference.conf所在的位置 那么,您的reference.conf 文件中是否有akka 配置条目? (对不起,如果这听起来很傻,但我最近实际上遇到了同样的问题,我很简单地解决了它,正如我在上面的答案中描述的那样) 一开始我没有任何reference.conf 文件。由于我收到此错误,我从以下位置添加了整个文件:github.com/akka/akka/blob/master/akka-actor/src/main/resources/… 我现在不需要任何配置,我只想让我的项目使用 akka 运行。你是怎么解决的? reference.conf 中的任何特定条目? 好吧,当我遇到这个问题(构建期间出现 DuplicateFileException)时,我实际上做了以下事情:1)在我的 build.scala 中的 apkBuildExcludes 中添加了“reference.conf”,2)放置了“reference.conf “从 akka repo 到我的资源目录。而且,据了解,akka config 的版本号和 porject 依赖项中 akka 的版本号必须相同。 如果它没有帮助,稍后,我可以与你分享一个基于 akka 的最小 scaloid 项目。【参考方案4】:

只求一个完整的答案:

android-sdk-plugin 接受的目录布局似乎有三种:

    蚂蚁 分级 包裹

我找到的所有答案都表明我应该将我的 reference.conf 文件放在 $BASE/src/main/resources/ 上。但是看看ProjectLayout.scala,我们可以看到这个建议只在 Gradle 布局中真正有效。

在我的项目中,插件使用的是 Ant 布局,所以应该放在 $BASE/resources/ 上

【讨论】:

以上是关于Android 上的 Akka 多参考.conf的主要内容,如果未能解决你的问题,请参考以下文章

Akka-http:连接到localhost上的websocket

Web 服务器 getFromFile 上的 akka-http 在刷新时导致 404s

Scala笔记整理:Actor和AKKA

Scala笔记整理:Actor和AKKA

使用akka框架和scala语言编写简单的RPC通信案例

利用Akka并行执行SparkSQL任务