Scala Программирование для Android

258

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

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

Ответы:

128

Я написал несколько базовых приложений для Android на Scala, ничего особенного. Не будучи Java-программистом, мне предложили использовать «treehake», друг объяснил мне, что это убирает все ненужные библиотеки из 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)
Лемми,
36
Лемми - есть ли причина, по которой ты не принял этот ответ? Возможно, вы нашли лучшее решение?
Бостоне
3
По моему опыту, treehake не достаточно хорош для большинства нетривиальных scala-кодов. Это просто недостаточно агрессивно.
Джеймс Мур
45

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

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

Джейсон Фогеле
источник
Прекрасно работает! Ни одно из решений, которые я пробовал, не работало "из коробки", но ваш плагин Gradle дал мне полезную обратную связь, чтобы я мог легко исправить то, что пошло не так.
Мендель
Джейсон, ты все еще работаешь над этим? Последний коммит был 9 месяцев назад, и с тех пор оценка была увеличена.
Питер Айтай
Питер, разработка остановилась из-за того, что Gradle теперь является родной системой сборки для Android.
Джейсон Фогеле
22

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

Ян Беркель
источник
1
Этот плагин не совместим с новейшими версиями SBT. Вы все еще поддерживаете этот плагин? SBT плагин , который является совместимым с новейшими версиями этого на андроид-СДК-плагин .
DCKing
15

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

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

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

Микаэль Майер
источник
3
Это звучит потрясающе. Каково время сборки с этим решением при развертывании на устройстве (по сравнению с развертыванием сопоставимого проекта Java Android)?
evilcandybag
1
Время сборки составляет около 10 секунд при развертывании на устройстве. Я надеюсь, что когда-нибудь это будет быстрее.
Микаэль Майер
6
Теперь это занимает около 1 секунды с последним Android SDK и плагином из-за новой хорошей реализации кэша.
Микаэль Майер
7

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

Обратите внимание, что этот вопрос является типичным примером вопроса с устаревшими ответами о переполнении стека. Этот ответ, скорее всего, тоже устареет.

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

DCKing
источник
6

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

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

pocorall
источник
4

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

Gradle - более родной инструмент для сборки Android, чем SBT.

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

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

https://github.com/ghik/akkdroid

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

mikowiec
источник
3

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

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

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


источник