我想在 中进行 Android 开发Clojure
,使用中的Cursive
插件Android Studio
。我看过一些帖子,人们说这是可能的,但我无法让它发挥作用。
当我尝试构建时,我在尝试从 Java 调用 Clojure 时收到错误报告:
Error:(6, 18) error: package com.domain does not exist
Error:(15, 49) error: cannot find symbol variable tiny
这是我尝试过的:
我已经在
Cursive
运行IntelliJ
、leiningen
构建和运行独立的 Clojure 应用程序启动 Android Studio,版本 1.5.1
创建一个新的 Android 项目。选定的 API 级别 15,空活动
按照这篇文章安装 Cursive 插件: Is it possible to get the Cursive Plugin installed with Android Studio?
添加clojure jar到classpath:打开模块设置、依赖、+Library Dependency,搜索并选择
org.clojure:clojure:1.8.0-RC5
从
Android
视图切换到Project
视图,创建 Clojure src 目录:选择app/src/main
并创建新目录clojure
下一步是创建一个
Clojure
可以从 Java 调用的源文件,使用这篇文章中的示例:Calling clojure from java选择 src 目录
clojure
,右键New
Clojure Namespace
输入:(com.domain.tiny
与示例中使用的 ns 匹配)将上面示例中的代码粘贴到新文件中(请注意,新文件中的 ns 曾经是
tiny
并且应该是com.domain.tiny
)它会说
File tiny.clj is not under a source root
所以点击Add source root
。现在我们两者都有src/java
并src/clojure
设置为 src 根构建项目。此时看起来一切都很顺利,Java 或 Clojure 代码中都没有语法错误。我们可以部署和运行(几乎)空的 Android 项目,并运行本地 REPL 来加载和测试我们的 Clojure 代码。
我们想从 Java 中调用一些 Clojure 代码,因此将以下代码添加到
MainActivity
(同样,来自上面的示例):System.out.println("(binomial 5 3): " + tiny.binomial(5, 3)); System.out.println("(binomial 10042, 111): " + tiny.binomial(10042, 111));
Android Studio可以找到包
com.domain.tiny
和tiny
类,没有语法错误,看起来不错现在尝试构建项目 - 此时我收到一个错误:
Error:(6, 18) error: package com.domain does not exist Error:(15, 49) error: cannot find symbol variable tiny
在这一点上,我被困住了。我猜即使编译器可以看到 Clojure 代码,但在构建过程中仍然缺少一些东西。leiningen
需要参与吗?如果是这样,我不知道如何,或者我可能必须在project.clj
配置文件中放入什么。
有人有想法么?谢谢!