android - 如何在 Android Studio 中使用 Cursive 构建 Android 应用

标签 android android-studio clojure cursive

我想在 Clojure 中使用 Android Studio 中的 Cursive 插件进行 Android 开发。我看过几篇帖子,其中有人说这是可能的,但我无法让它发挥作用。

当我尝试构建时,我在尝试从 Java 调用 Clojure 时收到错误报告:

Error:(6, 18) error: package com.domain does not exist
Error:(15, 49) error: cannot find symbol variable tiny

这是我尝试过的:

  1. 我已经使用 leiningenIntelliJ 中运行 Cursive,构建并运行独立的 Clojure 应用

  2. 启动 Android Studio,版本 1.5.1

  3. 创建一个新的 Android 项目。选定的 API 级别 15,空 Activity

  4. 按照这篇文章安装 Cursive 插件: Is it possible to get the Cursive Plugin installed with Android Studio?

  5. 将 clojure jar 添加到类路径:打开模块设置、依赖项、+库依赖项,搜索并选择 org.clojure:clojure:1.8.0-RC5

    <
  6. Android View 切换到Project View ,创建Clojure src目录:选择app/src/main并新建目录 clojure

  7. 下一步是创建一个 Clojure 源文件,它可以从 Java 调用,使用本文中的示例:Calling clojure from java

  8. 选择src目录clojure,右击NewClojure Namespace输入:com.domain.tiny(以匹配示例中使用的 ns)

  9. 将上面示例中的代码粘贴到新文件中(请注意,新文件中的 ns tiny 应该是 com.domain.tiny)

  10. 它会说文件 tiny.clj 不在源根目录下 所以点击添加源根目录。现在我们将 src/javasrc/clojure 设置为 src root

  11. 构建项目。此时看起来一切顺利,Java 或 Clojure 代码中都没有语法错误。我们可以部署和运行(几乎)空的 Android 项目,并运行本地 REPL 来加载和测试我们的 Clojure 代码。

  12. 我们想从 Java 调用一些 Clojure 代码,因此将以下代码添加到 MainActivity(同样来自上面的示例):

    System.out.println("(binomial 5 3): " + tiny.binomial(5, 3));
    System.out.println("(binomial 10042, 111): " + tiny.binomial(10042, 111));
    
  13. Android Studio 可以找到包com.domain.tinytiny 类,没有语法错误,看起来不错

  14. 现在尝试构建项目 - 此时出现错误:

    Error:(6, 18) error: package com.domain does not exist
    Error:(15, 49) error: cannot find symbol variable tiny
    

此时,我卡住了。我猜即使编译器看到 Clojure 代码正常,构建过程中仍然缺少一些东西。 leiningen 需要参与吗?如果是这样,我不知道如何,或者我可能必须在 project.clj 配置文件中放入什么。

有人有什么想法吗?谢谢!

最佳答案

编辑:

这似乎现在是不可能的。这是因为 Android Studio 要求项目使用 Gradle,而 Clojure Gradle 插件与 Android 不兼容。这在未来可能会奏效,但我们现在无法让它奏效。

原始答案:

感谢您的详细问题。我想你的 Clojure 代码必须经过 AOT 编译才能工作。要启用此功能,请检查 Settings->Build, Execution, Deployment->Compiler->Clojure Compiler 下的设置。如果您为 Clojure namespace 启用编译,这有帮助吗?

关于android - 如何在 Android Studio 中使用 Cursive 构建 Android 应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34778119/

相关文章:

android - 当我不需要进程间通信时,Android Service 有用吗?

android - Android 中的 Activity 和简单表单之间的根本区别是什么?

java - 为什么覆盖 onCreate(Bundle, PersistableBundle) 不起作用?

android - 使用底部导航 View (如Youtube)处理堆栈

android - Rating() 未在 'android.media.Rating.' 中公开 无法从外部包进行评估

android - 在 NDK 构建中包含 libjpeg

java - 如果存在强引用,保证返回现有对象的线程安全对象池?

clojure - 是否可以在 Clojure 中使用 Haskell 来实现 Reader Monad?

android - 使用 zxing 模块新导入的 Android Studio 项目错误

clojure - 来自 Clojure repl 的 JavaFX