gpt4 book ai didi

android - 如何将 Scala 集成到核心 Android 平台中?

转载 作者:IT老高 更新时间:2023-10-28 22:03:38 25 4
gpt4 key购买 nike

我有兴趣将 Scala(或其他一些非 Java JVM 语言)集成到 android 平台中。我指的不是用 Scala 编写一个 android 应用程序,我很早就做了,而是实际连接到构建 android 平台源代码树的构建过程。我想这将是一个 Hook 到 makefile 之类的问题。有没有人对此有所了解?

到目前为止我所拥有的:
来自 git://android.git.kernel.org/platform/manifest.git 的平台源代码树以其原始形式构建,由“[下载并构建 Google Android][1]”指导

  • build/core/combo/scalac.mk # 配置scala编译器相关变量,包含在config.mk
  • 在 build/core/definitions.mk 中为 all-subdir-scala-files 和 all-scala-files-under 添加了定义
  • 在 definition.mk 中添加定义以构建 Scala 文件,以便它们包含在包


  • 还剩什么:
  • 包括 scala-library.jar
  • 确保对 -bootclasspath 的更改没有破坏任何内容
  • 弄清楚如何处理 Scala 类依赖于 java 类的情况,反之亦然
  • 代码大清理
  • 测试!
  • 用我所做的更改找出要做什么(除了将它们张贴在这里)

  • 看起来我是 差不多好了!!!

    过去的一些笔记

    最新:我找到了Java源文件的编译位置!在definitions.mk 中,请参阅“定义transform-java-to-classes.jar”。最新的想法是编写一个 transform-scala-to-classes 定义,然后让它直接将这些类存储在打包的地方。我将在 transform-java-to-classes.jar 中的这一步之前调用 transform-scala-to-class。对 eclipse 和 cygwin 的支持现在将被删除,因为它会用变通方法弄乱代码,因此增加了我失败的机会。

    构建过程从运行 build/core/main.mk 的根 Makefile 开始
    build/core/main.mk 包括 build/core/config.mk,其中包括 build/core/combo/javac.mk,它设置 HOST_JAVAC、TARGET_JAVAC 和 COMMON_JAVAC。 COMMON_JAVAC 是“带有通用参数的 Java 编译器命令”,从外观上看,其他两个变量默认获取这些值,除非在特殊环境(openjdk 或 eclipse)中。 COMMON_JAVAC 不在此文件之外使用。其他两个仅在 build/core/definitions.mk 中使用。

    build/core/java_library.mk(包含在 config.mk 中)似乎只关心构建 jars。这不在我们关心的范围内。任何与 jars 的交互都以类文件为前提,这些类文件假定我们已经成功构建了 Scala 文件。

    main.mk 中有关于 java 版本的检查。我们将忽略这些并假设我们的 scala 版本是兼容的。现在(在组合/scalac.mk 中)我正在使用 javac.mk 中使用的相同 --target arg。这也许应该存储在一个变量中。

    main.mk 还包括 build/core/definitions.mk,它依次定义了一些有用的函数。我们在这里关心的是 all-java-files-under 和 all-subdir-java-files。后者用于在 Android.mk 文件中查找 java 文件。前者用于后者的实现。我将编写它们的 Scala 等价物。

    为了弄清楚构建过程是如何工作的,我现在使用 -n 和其他参数运行 make。我从 stackoverflow 文章“[调试生成文件的工具][2]”中得到了这个想法。我也在研究使用 remake 进行调试。

    build/core/{config.mk, definition.mk} 让我们了解哪些 make 文件/命令用于做什么。

    作为对每个项目的支持进行黑客攻击的一种可能方式,额外的代码很可能被添加到项目的 Android.mk 文件中。从 platform/build/core/build-system.html 我们读到“Android.mk 是控制给定模块构建的 makefile fragment 的标准名称。只有顶级目录应该有一个名为“Makefile”的文件。”您可以创建一个像“scala-build”这样的新目标,并在最终 make 之前运行它(make PackageName scala-build)。人们也许还可以在变量赋值中偷偷地隐藏它,从而减少显式调用目标的需要。

    另一种方法(远为骇人听闻)是劫持用于 javac 的命令。这在 build/core/combo/javac.mk 中设置。您项目的 Android.mk 必须在 LOCAL_SRC_FILES 中包含 *.scala 文件以及 *.java 文件。

    最佳答案

    reddit 上的人说,有一个关于使用 ant 将 Scala 集成到 Android 中的教程 here .

    关于android - 如何将 Scala 集成到核心 Android 平台中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3427660/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com