【问题标题】:Alternative language or toolchain for creating Android programs用于创建 Android 程序的替代语言或工具链
【发布时间】:2012-06-13 22:55:41
【问题描述】:

Android 是否有某种替代工具链或语言可以生成独立的 APK 文件?

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

作为一个比喻,我正在寻找一个粗略的等价物,与 PowerBASIC 和 Mingw 以普通 Windows 为目标,尽管微软一直在发布新的 Visual Studios。

如果此语言或工具链本身是 Android 程序,则加分...

【问题讨论】:

标签: android ide apk dalvik toolchain


【解决方案1】:

您可能知道也可能不知道,Android 工具链基于几个简单的想法:

  • 您的代码是使用普通的旧 java 编译器编译的,并链接到 Android 存根 (android.jar) 以链接到系统库。
  • 编译后代码转换为dex格式。您实际上可以自己运行它,只需执行 dx --help。 dx 工具的工作是获取 Java 类文件并将它们转换为 dex 代码,这是一个非常简单的编译,涉及从基于堆栈到基于寄存器的 vm,以及一些其他更改。
  • 完成此操作后,使用一组 apk 工具构建 apk。它曾经是apkbuilder,但此后已被弃用。您实际上也可以自己运行它。所有的 APK 只是清单、资源和 dex 形式的所有代码的单个文件的集合。 (即,许多 .class 文件编译成单个 .dex 文件,由于包含指针网络,该文件要小得多)。

因此,Android 工具链实际上并没有那么复杂。自定义构建过程由 ant 构建规则处理,这些规则在 SDK 范围内的 build.xml 中定义,您可以在 platform-tools/ 目录 (iirc) 中找到该规则。但是,要使用此自定义构建环境生成新的基线项目,您只需使用 android update project 命令。

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

编辑:

经过一番挖掘,我发现this relevant android-developers thread. 一个令人不安的报价:

目前我们根本没有资源来支持那些 想使用自己的构建系统,但我们真的希望可以。在 我们尝试通过多种方式使其他工具供应商变得容易 将逻辑分离到 eclipse 或 ant 特定代码(因此众多 jar 文件在工具和 ADT 中随处可见),但这不是一个 其中。

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

【讨论】:

  • 一个真正的优秀答案。谢谢!如果有人想创建这样的工具链或单独的语言,你的答案是一个很好的开始,如果你愿意的话,APK 知识的根节点。
  • 随机的想法。由于 Dalvik 是面向寄存器的,“某人”应该让 LLMV 直接以 Dalvix/DEX 为目标,而不需要 Java 中间步骤...
  • 嗯,这当然是可行的,但老实说(作为从事编译器工作的人)中间形式并没有那么不同,Java 字节码看起来更像 dex与 LLVM 相比(例如,因为 LLVM 缺乏与类/接口/Java-y 类型世界的知识相关的指令)。但是,是的,可行的。
  • 关于令人不安的报价,至少它表明第三方工具链在他们(谷歌)的雷达上,并且他们并不认为它本质上是邪恶的。 (与其他人多年来SUN/Oracle-cough-cough 认为有人使用 Java 以外的其他语言针对他们宝贵的 JVM 的看法不同。)
  • 没错。 Android 世界的目标是开放,我认为 Google 的观点是他们的开放将导致普遍/采用,这就是他们将接管世界的方式。但是,是的,他们似乎支持这样的想法,对于非谷歌工具来说并没有很大的动力。 (例如,我在使用 Dalvik 字节码进行程序分析相关项目;我们仍然使用大部分 Android 工具链!)
【解决方案2】:

Terminal-IDE 和 AIDE 几乎就是我想要的。两者都在 Android 上运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-07
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    相关资源
    最近更新 更多