【问题标题】:Is there a particular reason Java is the only way to program Android?Java是Android编程的唯一方法有什么特别的原因吗?
【发布时间】:2010-10-14 07:23:12
【问题描述】:

当 Dalvik 和 Google 的 Android 操作系统刚问世时,我阅读了很多有关它的信息。我不太明白的一件事是为什么要使用 Java。我的理解是这样的:

Java code -> Java bytecode -> Dalvik bytecode

我不明白为什么我还没有看到任何东西可以直接编译为 Dalvik 代码或任何其他前端,而不是用于 Dalvik VM 的 Java。是否有任何关于直接编译器的工作或在没有 Java 的情况下使用 Android 的方法?

为了澄清,我正在寻找不编译为 Java 字节码的语言。而且我也不关心动态语言,我已经阅读了一些关于它们的问题。而且我知道 NDK,我正在寻找有关 Dalvik 编译语言的信息,而不是实际的本机编译语言。

【问题讨论】:

  • 请参阅 [ 没有 Java 的 Android ](stackoverflow.com/questions/3242034/android-without-java)。但是您应该澄清您是否正在寻找 Java 语言(相对常见)或 Java 字节码的替代品。我个人没有听说过使用 Davlik VM 但不使用 Java 字节码的项目。

标签: java android dalvik


【解决方案1】:

还可以编写直接在操作系统上运行的原生 Android 应用程序(它是 *nix 的变体)。推荐的方法是使用 Android NDK:

http://developer.android.com/sdk/ndk/index.html

还有更多“hacky”方法可以做到这一点:使用 ARM C/C++ 编译器,只需像编写任何普通 *nix 程序一样编写应用程序。不过,这主要适用于没有 GUI 的后台服务。

【讨论】:

    【解决方案2】:

    我不明白为什么我还没有看到任何东西可以直接编译为 Dalvik 代码或任何其他前端,而不是用于 Dalvik VM 的 Java。

    这样做的原因基本上是不需要“直接到Dalvik”编译器,因为正如您正确指出的那样,现有的编译链无论如何都是通过字节码进行的。

    直接使用 dalvik 的唯一原因是,如果该语言在某种意义上可以利用字节码中没有的 dex 功能。但是,dex 和 java 字节码极其相似。主要区别可能是 Dalvik 是基于寄存器的,而 JVM 是基于堆栈的。除此之外,指令集惊人地相似。


    您可能已经意识到,您可以使用任何基于 JVM 的语言,即编译为 java 字节码的语言。

    一些例子:

    【讨论】:

    • 嗯,dalvik 确实有“goto” ;-)
    • 直接转到 Dalvik 对于高级混淆器很有用,因为它允许您利用 dalvik 字节码格式的细微差异来欺骗依赖转换回 Java 字节码的天真的逆向工程工具。但是对于普通的编程没什么用。
    【解决方案3】:

    MonoDroid 是一个将 C#.NET 代码转换为 Dalvik 的 beta 项目。 它还没有完全完成,但它会为懂 C# 但不懂 Java 的人打开一些可能性。

    【讨论】:

      【解决方案4】:

      每个人都使用 Java,因为这是 Android 开发官方支持的内容,也是 Android SDK 所基于的开发内容。但是,他们还提供允许您使用 C/C++ 进行开发的 NDK(本机开发工具包)。

      在此处查看他们的原始公告:http://android-developers.blogspot.com/2009/06/introducing-android-15-ndk-release-1.html

      【讨论】:

      • 我相信很多时候NDK需要特殊的电话支持?而且我正在寻找更多直接到 Dalvik 代码,而不是机器代码。
      猜你喜欢
      • 2014-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-28
      • 1970-01-01
      • 2014-07-30
      • 2019-07-27
      • 1970-01-01
      相关资源
      最近更新 更多