Как создавать приложения для 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

Вот что я попробовал:

  1. у меня уже есть Cursive работает в IntelliJ с leiningen, создание и запуск автономных приложений Clojure

  2. Запустите Android Studio, версия 1.5.1

  3. Создайте новый проект Android. Выбранный уровень API 15, Пустая активность

  4. Установите плагин Cursive, как показано в этом посте: возможно ли установить плагин Cursive с Android Studio?

  5. Добавить clojure jar в classpath: откройте настройки модуля, зависимости, + библиотечная зависимость, найдите и выберите org.clojure:clojure:1.8.0-RC5

  6. Переключиться с Android смотреть на Project просмотреть, чтобы создать каталог Clojure src: выберите app/src/main и создайте новый каталог clojure

  7. Следующим шагом является создание Clojure Исходный файл, который можно вызвать из Java, используя пример в этом посте: Вызов clojure из Java

  8. Выберите каталог src clojureщелкните правой кнопкой мыши NewClojure Namespace и введите: com.domain.tiny (чтобы соответствовать ns, использованным в примере)

  9. Вставьте код из приведенного выше примера в новый файл (обратите внимание, что ns в новом файле было tiny и должен был com.domain.tiny)

  10. Это скажет File tiny.clj is not under a source root так что нажмите на Add source root, Теперь у нас есть оба src/java а также src/clojure установить как корни src

  11. Постройте проект. На данный момент все выглядит так, как будто все в порядке, нет синтаксических ошибок в коде Java или Clojure. Мы можем развернуть и запустить (почти) пустой проект Android, а также запустить локальный REPL для загрузки и тестирования нашего кода Clojure.

  12. Мы хотим вызвать некоторый код Clojure из Java, поэтому добавьте следующий код в 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.tiny и tiny класс, без синтаксических ошибок, поэтому выглядит хорошо

  14. Теперь попробуйте собрать проект - в этот момент я получаю сообщение об ошибке:

    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, это поможет?

Другие вопросы по тегам