用于创建Android程序的替代语言或工具链

用于创建Android程序的替代语言或工具链,android,ide,apk,dalvik,toolchain,Android,Ide,Apk,Dalvik,Toolchain,Android是否有其他工具链或语言可以生成独立的APK文件 理想情况下,它应该而不是依赖于庞大、不断变化、不断升级的官方Android SDK 作为一个比喻,尽管微软一直在发布新的Visual Studio,但我正在寻找一个大致相当于如何将普通窗口作为目标的方法 如果这种语言或工具链本身是一个Android程序,您可能知道,也可能不知道,Android工具链基于几个简单的想法: 您的代码是使用普通的旧java编译器编译的,并与Android存根(Android.jar)链接,以便与系统库链接

Android是否有其他工具链或语言可以生成独立的APK文件

理想情况下,它应该而不是依赖于庞大、不断变化、不断升级的官方Android SDK

作为一个比喻,尽管微软一直在发布新的Visual Studio,但我正在寻找一个大致相当于如何将普通窗口作为目标的方法


如果这种语言或工具链本身是一个Android程序,您可能知道,也可能不知道,Android工具链基于几个简单的想法:

  • 您的代码是使用普通的旧java编译器编译的,并与Android存根(Android.jar)链接,以便与系统库链接
  • 编译后,代码将转换为dex格式。实际上,您可以自己运行它,只需执行
    dx--help
    dx
    工具的工作是获取Java类文件并将其转换为dex代码,这是一种非常简单的编译,包括从基于堆栈的vm转换为基于寄存器的vm,以及一些其他更改
  • 在完成此操作后,将使用一组apk工具构建apk。它以前是apkbuilder,但后来被弃用了。实际上,您也可以自己运行它。APK只是清单、资源和一个文件的集合,所有代码都以dex形式存在。(也就是说,许多.class文件编译成一个.dex,由于指针的包装网络,这个文件要小得多)
所以Android工具链其实并不那么复杂。自定义构建过程由ant构建规则处理,这些规则在SDK范围的
build.xml
中定义,您可以在
平台工具/
目录(iirc)中找到。但是,要使用此自定义构建环境生成新的基线项目,只需使用
android update project
命令

虽然我不确定这是否是您希望的响应,但我希望它能消除构建过程中的歧义。它并不是一个真正复杂的工具链,它的大部分是现成的Java,而不是特定于Android的(使其特定于Android的是用于动态链接系统代码的特定于库的存根)。除此之外,一旦你有了一组类,你只需要运行几个命令就可以生成一个可执行的APK,Android可以将其解包。我怀疑任何以JVM为目标的工具(能够与Android特定的动态链接API链接)都可以执行类似的过程,生成类文件并使用此工具链编译其余部分,尽管自动化ant构建过程显然使其简单得多

编辑:

在进一步挖掘之后,我发现了一句令人不安的话:

现在我们根本没有资源来支持那些 想要使用自己的构建系统,但我们真的希望我们可以。在里面 在许多方面,我们试图通过明确的 将逻辑与eclipse或ant特定代码分离(因此 工具和ADT中到处都有jar文件),但这不是一个 是的


不过,您可能也会发现有帮助。

和我一直在寻找的东西差不多。两者都在Android上运行。

这是一个非常好的答案。非常感谢。如果有人想创建这样一个工具链或单独的语言,你的答案是一个很好的开始,如果你愿意的话,它是APK知识的根节点。由于Dalvik是面向寄存器的,“有人”应该让LLMV直接以Dalvix/DEX为目标,而不使用Java中间步骤……嗯,这当然是可行的,但老实说(作为在编译器中工作的人),中间形式并没有那么大的不同,Java字节码看起来更像DEX而不是LLVM(因为,例如,LLVM缺少与类/接口有关的知识/ JavaY类型世界的知识)。但是,是的,可行。关于不安的引用,至少它表明第三方工具链在他们的(Google)雷达上,并且他们不认为它本身是邪恶的。(与其他一些SUN/Oracle公司多年来一直认为有人用Java以外的其他语言瞄准他们宝贵的JVM不同。)没错。安卓世界的目标是开放,我认为谷歌的观点是,他们的开放将导致普遍存在/采用,这就是他们将如何接管世界。但是的,他们似乎支持这样一个想法,只是对非谷歌工具没有太大的动机。(例如,我使用Dalvik字节码从事一个与程序分析相关的项目;我们仍然使用大多数Android工具链!)相关: