2009-01-24 3 views
245

Я следовал учебнику на Scala and Android с Scala 2.7.3 final. Полученное приложение для Android работает, но даже самое основное приложение занимает несколько минут (!) Для компиляции и требует 900 kb сжимается, что является пробной пробкой для мобильных приложений. Кроме того, у IDE время от времени заканчивается память. Я предполагаю, что dex не предназначен для больших библиотек, таких как scala-library.Scala Программирование для Android

  • Так что мой вопрос: кто-нибудь действительно сделал это и есть ли какое-либо лекарство от этого?

ответ

125

Я написал несколько базовых приложений для Android в Scala, ничего особенного. Не будучи Java-программистом, мне предложили использовать «treeshake», мне объяснил друг, что это вырезает все ненужные библиотеки из файлов jar.

Я не документировано, но я обнаружил, что кто-то уже есть:

http://chneukirchen.org/blog/archive/2009/04/programming-for-android-with-scala.html

Proguard это не единственное решение, вы можете найти то, что подходит вашей работы потока или больше подходит для вашего Окружающая среда.

Кроме Google только понял, JACK, которая занимается довольно много сокращения строить и времена памяти см https://source.android.com/source/jack.html

+3

Спасибо! Мне придется попробовать это. Интересно, можно ли его использовать с Eclipse (используя плагины Scala и Android) – Lemmy

+34

Lemmy - есть ли причина, по которой вы не приняли этот ответ? Возможно, вы нашли лучшее решение? – Bostone

+0

Ссылка снова – Markus

43

Теперь вы можете использовать Android плагин для Gradle для создания Android-приложений в Scala. Он включает инструмент ProGuard для обрезки жира из полученного файла APK, поэтому, похоже, отвечает вашим потребностям.

http://wiki.github.com/jvoegele/gradle-android-plugin/

+0

Отлично работает! Ни одно из решений, которые я пробовал, не исходило из коробки, но ваш плагин Gradle дал мне полезную обратную связь, поэтому я мог легко исправить то, что пошло не так. – Mendelt

+0

Джейсон, ты все еще работаешь над этим? Последнее совершение было 9 месяцев назад, и с тех пор класс был запущен. –

+0

Peter, развитие остановилось из-за того, что Gradle теперь является родной системой сборки для Android. –

21

Существует также плагин для Scala на основе застройщика sbt: sbt-android-plugin.

+1

Этот плагин несовместим с новейшими версиями SBT. Вы все еще поддерживаете этот плагин? Плагин SBT, который * * совместим с новейшими версиями этого [android-sdk-plugin] (https://github.com/pfn/android-sdk-plugin). – DCKing

13

Я проверил это подробное решение с Eclipse, 3.7, Scala 2.10 и плагин AndroidProguardScala v50:

https://stackoverflow.com/a/11084146/1287856

Все работает нормально. Простое тестовое приложение с классом основного класса scalafied занимает только 38 КБ. Поддерживаются проекты библиотек. Proguard активируется при экспорте проекта.

+3

Звучит потрясающе. Как время сборки с этим решением при развертывании на устройстве (по сравнению с развертыванием сопоставимого проекта Java Android)? – evilcandybag

+1

Время сборки составляет около 10 секунд при развертывании на устройстве. Надеюсь, что когда-нибудь это будет быстрее. –

+5

Теперь требуется около 1 секунды с последним Android-подключением и подключаемым модулем, из-за некоторой новой хорошей реализации кэша. –

6

Если вы используете maven, используйте android-scala-test в качестве шаблона запуска. Он отлично работает для меня из коробки.

Scaloid - это обертка Android API, написанная на Scala, которая поможет вам написать свою программу для Android в стиле Scala.

4

Вы можете использовать Scala на Android без SBT, созданный извне Gradle для создания приложений для Android. https://github.com/yareally/android-scala-intellij-no-sbt-plugin

Gradle - более традиционный инструмент для строительства андроида, чем SBT.

Существует хороший пример концепции решения для клиентов и серверных решений Scala, а также инструмент для построения градиентов в качестве аванса для инструментальных средств IntelliJ IDEA.

Большой прогресс в том, что основные классы являются общими для клиента и сервера.

https://github.com/ghik/akkdroid

Хороший учебник для IDEA и андроид-плагин: http://fxthomas.github.io/android-plugin/

6

Разработка Android-приложений для Scala постоянно развивается. Текущий лучший способ сделать это представляется SBT в сочетании с android-sdk-plugin, который поддерживается * и хорошо работает для меня в моем проекте Scala/Android. Несколько недавний пример, демонстрирующий использование этого плагина с уже упомянутым Scaloid, может быть also be found.

Обратите внимание, что этот вопрос является типичным примером question with outdated answers для переполнения стека. Этот ответ, скорее всего, устареет и в какой-то момент.

* Другие проекты на основе SBT, упомянутые в этом потоке ответов, по-видимому, не содержат для них кода за последние шесть месяцев на момент написания. Они могут иметь проблемы совместимости с более новыми версиями Scala и SBT.

2

Самая большая проблема с Scala на Android - это время компиляции.

Возможно, из-за зачистки классов класса Proguard с плагином IDEA13/Scala на двухъядерном четырехъядерном процессоре (8-процессорный) E5450 Xeon с 8 ГБ может занимать две минуты или больше.

Я просто вернулся на Java после завершения крупного проекта Android Scala, поскольку время компиляции было слишком расстраивающим.

Смежные вопросы