Scala Программирование для Android
Я выполнил руководство по Scala и Android с окончанием Scala 2.7.3. Полученное приложение для Android работает, но даже самое базовое приложение занимает несколько минут (!) Для компиляции и требует сжатия 900 кб, что является показом проб для мобильных приложений. Кроме того, у IDE время от времени заканчивается память. Я предполагаю, что dex
не предназначен для больших библиотек, таких как scala-library
.
- Итак, мой вопрос: кто-нибудь действительно сделал это и есть ли какое-либо лекарство от этого?
Ответы
Ответ 1
Я написал несколько базовых приложений для 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
Ответ 2
Теперь вы можете использовать плагин Android для Gradle для создания приложений Android в Scala. Он включает в себя инструмент ProGuard для обрезки жира из получившегося файла APK, поэтому, кажется, соответствует вашим потребностям.
https://github.com/jvoegele/gradle-android-plugin/wiki
Ответ 3
Существует также плагин для Scala -строительного строителя sbt: SBT-андроид-плагин.
Ответ 4
Для учебных пособий и примеров см. также страницу Stéphane Micheloud "Изучение Android": http://lamp.epfl.ch/~michelou/android/
Ответ 5
Я проверил это подробное решение с Eclipse 3.7, Scala 2.10 и плагином AndroidProguardScala v50:
fooobar.com/questions/27676/...
Все работает отлично. Простое тестовое приложение с классом основного класса scalafied занимает только 38 КБ. Поддерживаются проекты библиотек. Proguard активируется при экспорте проекта.
Ответ 6
Разработка приложений для Android для Scala постоянно развивается. Текущий лучший способ сделать это представляется SBT в сочетании с android-sdk-plugin, который поддерживается * и хорошо работает для меня в моем Scala/Android-проект. Несколько недавний пример, демонстрирующий использование этого плагина с уже упомянутым Scaloid, может .
Обратите внимание, что этот вопрос является типичным примером вопроса с устаревшими ответами о переполнении стека. Этот ответ, скорее всего, устареет и в какой-то момент.
* Другие проекты на основе SBT, упомянутые в этом потоке ответов, по-видимому, не содержат для них кода за последние шесть месяцев на момент написания. Они могут иметь проблемы совместимости с более новыми версиями Scala и SBT.
Ответ 7
Если вы используете maven, используйте android-scala-test в качестве шаблона запуска. Он отлично работает для меня из коробки.
Scaloid - это оболочка Android API, написанная в Scala, которая поможет вам написать свою программу для Android в стиле Scala.
Ответ 8
Вы можете использовать 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/
Ответ 9
Самая большая проблема с Scala на Android - это время компиляции.
Возможно, из-за компиляции класса Proguard с плагином IDEA13/ Scala на двухъядерном четырехъядерном процессоре (8-процессорный) E5450 Xeon с 8 ГБ может потребоваться две минуты или более.
Я просто вернулся на Java после завершения довольно большого проекта Scala Android, поскольку время компиляции было слишком расстраивающим.