在Android上使用Scala值得吗?有很多开销吗?问题?

时间:2010-10-11 13:16:30

标签: android scala

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

任何问题和不必要的麻烦?

3 个答案:

答案 0 :(得分:26)

使用Scala应该是无痛的,因为dex编译器只使用字节码 - 这正是Scala产生的。

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


目前的最佳做法是将SBT与Android插件一起使用;它会照顾你的一切:http://github.com/jberkel/android-plugin

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

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

答案 1 :(得分:15)

There is来自bu.mp的人们在Scala Days 2011上的演讲。

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

要点:

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

虽然他也在讨论IDE,但我认为这不是问题(关于Scala environment ,请查看this帖子)。做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设计器。此外,您可以使用支持Android(Google)和Scala(按Typesafe)支持的Eclipse。 Android Studio(基于IDEA的新IDE,在Google IO '13上宣布并由Google开发)支持IDEA插件,因此Scala。

答案 2 :(得分:5)

我们上周五在Scala Lift Off London进行了讨论,并且一致认为,只要你避开Actors,它通常都能正常工作。此外,强烈建议使用sbt-android-plugin。 Nathan Hamblen的博客有many posts on Android,而且标记为Scala的博客也有很多值得关注的问题。