Как создавать приложения для Android с помощью Cursive в Android Studio
Я хотел бы заняться разработкой Android в Clojure
, с использованием Cursive
плагин в Android Studio
, Я видел несколько постов, где люди заявляли, что это возможно, но я не смог заставить его работать.
Когда я пытаюсь собрать, я получаю сообщения об ошибках, когда пытаюсь вызвать Clojure из Java:
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, как показано в этом посте: возможно ли установить плагин Cursive с Android Studio?
Добавить clojure jar в classpath: откройте настройки модуля, зависимости, + библиотечная зависимость, найдите и выберите
org.clojure:clojure:1.8.0-RC5
Переключиться с
Android
смотреть наProject
просмотреть, чтобы создать каталог Clojure src: выберитеapp/src/main
и создайте новый каталогclojure
Следующим шагом является создание
Clojure
Исходный файл, который можно вызвать из Java, используя пример в этом посте: Вызов clojure из 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.
Мы хотим вызвать некоторый код Clojure из Java, поэтому добавьте следующий код в
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
конфигурационный файл.
У кого-нибудь есть идеи? Спасибо!
1 ответ
Редактировать:
Это кажется невозможным прямо сейчас. Это связано с тем, что для Android Studio требуются проекты для использования Gradle, а плагин Clojure Gradle несовместим с плагином Android. Это может сработать в будущем, но мы не могли заставить его работать прямо сейчас.
Оригинальный ответ:
Спасибо за подробную проблему. Я думаю, что ваш код Clojure должен быть скомпилирован AOT, чтобы это работало. Чтобы включить это, проверьте параметры в разделе Настройки-> Сборка, Выполнение, Развертывание-> Компилятор-> Компилятор Clojure. Если вы включите компиляцию для своих пространств имен Clojure, это поможет?