Использует Scala на Android? Много накладных расходов? Проблемы?

Я думал о создании приложения на Android с помощью Scala вместо обычной Java (или эквивалентной, как мне кажется). Стоит ли оно того?

Любые проблемы и ненужные головные боли?

Solutions Collecting From Web of "Использует Scala на Android? Много накладных расходов? Проблемы?"

Работа с Scala должна быть в основном безболезненной, так как компилятор dex работает только с байт-кодом – именно это производит Scala.

Самая большая проблема заключается в зависимости от scala-библиотеки, поскольку dex ожидает, что все будет в одном Jar. Лучше всего это обрабатывать с помощью Proguard (который также удалит неиспользуемый код и даст вам меньший исполняемый файл, идеально подходящий для мобильных устройств)


Текущей лучшей практикой является использование SBT с плагином Android; Он позаботится обо всем: http://github.com/jberkel/android-plugin

Если вы должны использовать Eclipse и плагин, поставляемый Google, тогда у вас будет нестандартная структура каталогов. Я также написал статью о том, как справиться с этим: http://www.assembla.com/wiki/show/scala-ide/Developing_for_Android

Но будьте осторожны … для этого требуется гораздо больше усилий!

Говорят ребята из bu.mp на Scala Days 2011.

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

Резюме:

  • Использование памяти. Закрытия едят память. Scala имеет закрытие повсюду. Хотя это не относительная большая проблема (накладные расходы памяти) на вашем настольном ПК, ее следует учитывать при разработке для мобильного телефона. Вы можете спросить: как они это решили? У них была охота на плотные петли, а затем их оптимизировали (переписаны в беззаботной scala / java). (26-я ​​минута) Я думаю, что Java 8 с поддержкой родных замыканий облегчит эту проблему. Следующий релиз scala будет нацелен на платформу java 8 с новым бэкэнд и нацелен на гораздо более высокую производительность. Обсуждение дорожной карты здесь .
  • Более медленный компилятор (так как Михал Гальпин сказал, что у них есть 15 секунд для компиляции кода Java, около минуты для Scala и порядка больше для Proguard, но обратите внимание, что это зависит от вашей базы кода и машин, но я подозреваю, что это соотношение будет тоже самое). Это особенно раздражает, когда вы создаете пользовательский интерфейс, например, движущиеся пиксели, кнопки и т. Д., И хотите быстро увидеть результат. (7-я минута)
  • Были некоторые проблемы с внутренними классами, которые довольно распространены для Android (подробнее см. В 23:00).
  • Были редкие ошибки в scalac (scala-компилятор) в scala-java-коллекции interop. Проблемы были решены, написав это явно (я подозреваю, что это не так много шаблонов).

Хотя он и говорит об IDE тоже, я не думаю, что это проблема (посмотрите этот пост, о среде Scala). Ребята, которые делают Scala IDE и IntelliJ, делают свою работу хорошо, и поддержка IDE становится все лучше и лучше.

Для модульного тестирования можно использовать RoboSpecs (позволяет запускать модульные тесты внутри JVM, а не внутри эмулятора), что происходит быстрее.

Одна из самых больших проблем, на которые я наткнулся, – это ограничения формата dex (не более 65536 ссылок метода на файл dex). Библиотека Scala просто не вписывается в лимиты, поэтому вам необходимо обходиться с помощью:

  • Используя Proguard, который обрезает жир из scala lib. Но на моем ноутбуке он очень медленный, и он просто тратит время на разработку (но очень полезно, когда вы отправляете свое приложение в Google Play)
  • Используя предварительно установленную библиотеку . Плохо то, что этот проект немного заброшен и содержит только версию 2.9.0-1.
  • Предварительная установка scala на вашем телефоне

Некоторые ребята утверждают, что есть проблемы с IDE, но все быстро меняется: текущая версия IntelliJ IDEA 12 не только хорошо поддерживает Scala как плагин, но также содержит UI Designer для Android. Кроме того, вы можете использовать Eclipse, который поддерживает как Android (от Google), так и Scala (by Typesafe). Android Studio (новая IDE на основе IDEA, которая была анонсирована в Google IO '13 и разработана Google) поддерживает плагины IDEA, таким образом, Scala.

Мы обсуждали это на Scala Lift Off London в прошлую пятницу, и консенсус, казалось, заключался в том, что он работает нормально, пока вы избегаете Актеров. Кроме того, настоятельно рекомендуется использовать sbt-android-plugin . В блоге Nathan Hamblen есть много сообщений на Android, а те, чьи метки также отмечены Scala, имеют много проблем, которые стоит посмотреть.