Android上的Akka多个reference.conf

时间:2014-08-31 04:03:53

标签: android scala akka proguard

我试图添加akka并喷涂到我的Android应用程序(使用Scaloid lib在Scala中编写)。一切都应该工作正常,我的想法不会丢失任何错误。我找到了一些解决同一问题的链接,但到目前为止没有任何帮助。当我使用:

构建项目时
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
    // ....
  )
}

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

4 个答案:

答案 0 :(得分:3)

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

希望,这有帮助。

答案 1 :(得分:1)

我刚才在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)

希望有所帮助

答案 2 :(得分:0)

你应该放置" reference.conf"从akka repostiory文件到项目的 / src / main / resources 目录。

答案 3 :(得分:0)

只有完整的答案:

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

  1. 蚂蚁
  2. 摇篮
  3. 包裹
  4. 我发现的所有答案都说我应该将我的reference.conf文件放在$ BASE / src / main / resources /上。但是看ProjectLayout.scala,我们可以看到这个建议只适用于Gradle布局。

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