在Android Dalvik上我可以使用哪些编程语言?

66

理论上,Dalvik 可以执行任何虚拟机字节码,例如使用以下编译器生成的字节码:

  • AspectJ
  • ColdFusion
  • Clojure
  • Groovy
  • JavaFX Script
  • JRuby
  • Jython
  • Rhino
  • Scala

除了 Java 以外,还有其他语言的字节码编译器可以在 Dalvik 上运行吗?


Dalvik执行从Java源代码编译出的一种形式的字节码,并不意味着它与JVM兼容,即使从理论上讲也是如此。 - bug
请注意,“Rhino”是“JavaScript”的一种实现,“Jython”是“Python”的一种实现。点击此处获取更完整的列表。此外,在Android上可以在WebView中使用HTMLJavaScript语言,甚至有JavaScript框架和SDK可用。 - Shelby Moore III
8个回答

63
  • 在推出时,Java是唯一官方支持的用于构建可分发第三方Android软件的编程语言。

  • Android Native Development Kit(Android NDK)允许开发人员使用CC++构建Android软件组件。

  • 除了提供对本地代码的支持外,Google还扩展了Android以支持流行的动态脚本语言。本月早些时候,Google推出了Android Scripting Environment(ASE),该环境允许第三方开发人员使用perlJRubyPythonLUABeanShell构建简单的Android应用程序。有关ASE的想法和用法,请参阅此示例链接

  • Scala 也得到了支持。有关Scala的示例,请参阅这些 示例链接-1 , 示例链接-2 , 示例链接-3

  • 我刚刚参考了一篇此处文章,其中包含以下有用信息:

    1. 编程语言是Java,但存在从其他语言的桥接(C# .net-Mono等)
    2. 可以运行脚本语言,例如LUAPerlPythonBeanShell等。

  • 我刚刚阅读了Google发布“简单”Android编程语言的第二篇文章。有关此示例,请参考此处

  • 刚刚(2010年8月2日),我阅读了一篇关于“Frink编程语言和Android计算工具”的文章,请参阅这些链接 链接-1 , 链接-2

  • 在2010年8月4日,我发现了关于RenderScript的信息。基本上,它被称为用于高性能图形编程的类似于C的语言,可帮助您轻松地在Android应用程序中编写高效的视觉效果和动画。由于尚未完成,因此尚未发布。


25

Scala非常优秀。

我正在使用Scala编写我的Android应用程序项目(中文网站并带有一些截图GitHub上的源代码),而且不使用IDE,在使用SBT作为构建工具的情况下设置环境相当容易。

它可以访问Android SDK中的每个API,因此您在Java中能够做的任何事情,在Scala中也可以实现。

您可以查看这篇博客文章,了解如何使用Scala和SBT构建Android应用程序。


8

Kawa是Scheme的一个变体,存在已久且鲜为人知,可以在JVM和Dalvik上本地运行。因此,它的输出不包含额外的VM,仅包括明确导入的库。对于最终程序员来说,这意味着Kawa的性能和可执行文件大小几乎与标准Java相同(无需使用ProGuard)。

Kawa还包括许多宏(包括一些特定于Android API的宏),使得语法更加简洁(假设你不排斥括号),并在Scheme的基础上添加了一些有趣的功能,如“promises”(延迟求值和未来值合二为一)。该语言非常强大且文档齐全,自Java早期以来就一直得到积极维护和发展。

Java Advent Calendar用一些有用的例子和链接总结了Kawa的优点。


3

另一种在Android上可用的JVM语言是Kotlin,它还有来自JetbrainsAnko工具包。


3

1

Mercury 在 Android 上也可以使用其 Java 后端。我编写了一个简单的应用程序,可以帮助某些人入门(还有其他几个示例),以及mercury-android-helper 也是为此目的而编写的(尽管在这个确切的时刻,它缺少一些提交。并且两者都没有使用 ProGuard,因此 .apk 的大小令人震惊)。

虽然这里的其他帖子对于 Scala-on-Android 感到高兴,但 Scala 论坛的发帖人更关心 Scala 突破 Dalvik 的一些限制的能力,而使用它的人说他们将其保留用于非生产代码。(关于 Scala 的问题有一些讨论在这里。)

我还不能确定 Mercury 是否具有自己与 Dalvik 相关的问题,但我已经暂时从 Scala 切换到了它。


0

动态类型的语言在Dalvik支持JIT(即时编译)之前是不可能实现的。我相信在实验性的Eclair分支中有JIT支持,但它还没有在Android中得到官方的支持。


1
不,即使使用Android Froyo的JIT,大多数动态语言也无法工作。请参见https://dev59.com/1HNA5IYBdhLWcg3wZ9DU - Jean Hominal

0

1) Angular + NativeScript

2) React Native


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接