【问题标题】:Is using Scala on Android worth it? Is there a lot of overhead? Problems? [closed]在 Android 上使用 Scala 值得吗?有很多开销吗?问题? [关闭]
【发布时间】:2014-10-19 18:02:50
【问题描述】:

我正在考虑使用 Scala 在 Android 上构建一个应用程序,而不是使用常规的 Java(或者我猜的等价物)。值得吗?

有什么问题和不必要的头痛吗?

【问题讨论】:

标签: android scala


【解决方案1】:

使用 Scala 应该很轻松,因为 dex 编译器只使用字节码 - 这正是 Scala 生成的。

那么您最大的问题是对 scala-library 的依赖,因为 dex 期望所有内容都在一个 Jar 中。这最好使用 Proguard 处理(它还会删除未使用的代码并为您提供更小的可执行文件,非常适合移动设备)


当前的最佳实践是使用带有 Android 插件的 SBT;它会为您处理一切:http://github.com/jberkel/android-plugin

如果您必须使用 Eclipse 和 Google 提供的插件,那么您将拥有一个非标准的目录结构。我还写了一篇关于如何处理的文章:http://www.assembla.com/wiki/show/scala-ide/Developing_for_Android

但请注意……这样需要付出更多的努力!

【讨论】:

  • 主要问题是那些库使用反射(类似于 myClass.getMethod()),因为 proguard 无法检测到它们,您需要手动声明保留这些类/函数。还有一些库很难让它与 Scala/Proguard/Android 一起工作,例如。 gdata-java-客户端。或者您需要在 proguard 处理 JAR 后进行一些调整以保留中心文件,例如。 ical4j。否则,库通常可以很容易地使用这种组合。
  • 这是真的!提防反射...
【解决方案2】:

There is bu.mp 的人在 2011 年 Scala 日的演讲。

免责声明:虽然他们谈论了很多他们所面临的问题,但总体体验绝对是积极的。而且,这是一个特定团队的问题,而且是次要问题。

总结:

  • 内存使用情况。闭包吃掉内存。 Scala 到处都有闭包。虽然这在您的台式电脑上不是一个相对大的问题(内存开销),但在您为手机开发时应该考虑到它。你可能会问:他们是怎么解决的?他们寻找了一个紧密的循环,然后对其进行了优化(用无闭包 scala/java 重写)。 (第 26 分钟) 我认为带有原生闭包支持的 Java 8 将缓解这个问题 下一个 scala 版本将针对具有新后端的 Java 8 平台,旨在获得更好的性能。关于路线图的讨论is here
  • 较慢的编译器(正如 Michal Galpin 所说,Java 代码编译需要 15 秒,Scala 大约需要一分钟,Proguard 大约要多一个数量级,但请注意,这取决于您的代码库和机器,但我怀疑比率将相同)。当您制作 UI 时尤其烦人,例如移动像素、按钮等,并希望快速查看结果。 (第 7 分钟)
  • 内部类存在一些问题,这在 Android 中很常见(详情请查看 23:00)。
  • 在 scala-java-collections 互操作中的 scalac(scala 编译器)中存在 罕见 错误。通过明确地编写这些东西来解决问题(我怀疑这根本不是很多样板文件)。

虽然他也谈到了 IDE,但我认为这不是问题(请参阅 this 帖子,关于 Scala 环境)。使用 Scala IDE 和 IntelliJ 的人做得很好,IDE 支持越来越好。

对于单元测试,可以使用RoboSpecs(允许您在 JVM 中运行单元测试,而不是在模拟器中),这样更快。

我偶然发现的最大问题之一是 dex 格式的 limitations(每个 dex 文件不超过 65536 个方法引用)。 Scala 库根本不符合限制,因此您必须通过以下方式解决该问题:

  • 使用 Proguard 将修剪 scala lib 中的脂肪。但它在我的笔记本电脑上真的很慢,而且只是在开发阶段浪费时间(但在您将应用发布到 Google Play 时非常有帮助)
  • 使用predexed library。不好的是这个项目有点废弃,只包含 2.9.0-1 版本。
  • preinstalling scala 在你的手机上

有些人声称 IDE 存在问题,但事情很快发生了变化:当前版本的 IntelliJ IDEA 12 不仅很好地支持 Scala 作为插件,而且还包含适用于 Android 的 UI Designer。此外,您可以使用同时支持 Android(由 Google)和Scala(由 Typesafe)支持的 Eclipse。 Android Studio(基于 IDEA 的新 IDE,在 Google IO '13 上发布,由 Google 开发)支持 IDEA 插件,因此支持 Scala。

【讨论】:

    【解决方案3】:

    我们上周五在Scala Lift Off London 讨论了这个问题,大家的共识似乎是,只要你避免使用 Actors,它通常就可以正常工作。此外,强烈推荐sbt-android-plugin。 Nathan Hamblen 的博客有 many posts on Android 和标记 Scala 的博客有很多值得关注的问题。

    【讨论】:

    猜你喜欢
    • 2010-11-09
    • 2012-01-05
    • 2019-12-19
    • 2015-11-04
    • 2011-05-02
    • 2010-11-05
    • 2010-09-09
    • 1970-01-01
    相关资源
    最近更新 更多