2010-10-11 2 views
27

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

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

+2

http://www.assembla.com/wiki/show/scala-ide/Developing_for_Android –

ответ

26

Работа с 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

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

+3

Основная проблема заключается в том, что использование библиотеки использует (например, myClass.getMethod()), поскольку proguard не может их обнаружить, вам нужно объявить о том, чтобы сохранить этот класс/функцию вручную. И некоторым библиотекам просто сложно заставить его работать с Scala/Proguard/Android, например. GData-Java-клиент. Или вам нужна небольшая настройка для сохранения файлов cenrtain после обработки proguard JAR, например. ical4j. В противном случае библиотеки обычно могли бы работать с этой комбинацией очень легко. –

+0

Это правда! Будьте осторожны с отражением ... –

5

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

+0

http://code.technically.us/post/824974287/rewiring-android-for-type-safe-layout-resources - это классное (если не второстепенное) преимущество для программирования для Android в Scala вместо этого Java. –

15

There is разговор ребятами из bu.mp на Scala Days 2011

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

Резюме:

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

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

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

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

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

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

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