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