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


258

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

  • Отже, моє запитання: чи хтось насправді це робив і чи є для цього ліки?

Відповіді:


128

Я написав кілька основних програм для Android у Scala, нічого надто епічного. Не будучи програмістом на Java, мені запропонували скористатись «потиском дерева», друг мені пояснив, що це викреслить усі непотрібні бібліотеки з файлів 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

36
Леммі - чи є причина, що ти не прийняв цю відповідь? Можливо, ви знайшли краще рішення?
Бостон

3
На моєму досвіді, коктейль не достатньо для більшості нетривіальних кодів шкали. Це просто недостатньо агресивно.
Джеймс Мур

45

Тепер ви можете використовувати плагін Android для Gradle для створення додатків для Android у Scala. Він містить інструмент ProGuard для обрізання жиру з отриманого файлу APK, тому, здається, відповідає вашим потребам.

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


Чудово працює! Жодне рішення, яке я спробував, не працювало з коробки, але ваш плагін Gradle не дав мені корисних відгуків, щоб я міг легко виправити те, що пішло не так.
Mendelt

Джейсоне, ти все ще працюєш над цим? Останнє вступлення було 9 місяців тому, і з тих пір ступінь набула версії.
Пітер Айтай

Петро, ​​розвиток зупинився через те, що Gradle тепер є рідною системою збирання для Android.
Jason Voegele



15

Я перевірив це детальне рішення за допомогою Eclipse 3.7, Scala 2.10 та плагіну AndroidProguardScala v50:

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

Все працює добре. Простий тестовий додаток зі масштабованим класом основної діяльності займає лише 38 Кб. Проекти бібліотек підтримуються. Proguard активується під час експорту проекту.


3
Це звучить приголомшливо. Як час складання цього рішення під час розгортання на пристрої (порівняно з розгортанням порівнянного проекту Java Android)?
evilcandybag

1
Час збирання становить близько 10 секунд при розгортанні на пристрій. Я сподіваюся, що коли-небудь буде швидше.
Mikaël Mayer

6
Зараз за допомогою найсвіжішого Android sdk та плагіна потрібно близько 1 секунди через деяку нову хорошу реалізацію кешу.
Mikaël Mayer

7

Розробка програм для Android для Scala постійно розвивається. Найкращий поточний спосіб зробити це видається SBT спільно з плагіном android-sdk , який підтримується * і добре працює для мене в моєму проекті Scala / Android. Дещо останній приклад, який демонструє використання цього плагіна з уже згаданим Scaloid, також можна знайти .

Зауважте, що це питання є типовим прикладом запитання із застарілими відповідями щодо переповнення стека. Ця відповідь, ймовірно, буде застарілою і в якийсь момент.

* В інших проектах на основі SBT, згаданих у цій нитці відповідей, схоже, не було написано для них коду протягом останніх шести місяців на момент написання. У них можуть виникнути проблеми сумісності з новішими версіями Scala та SBT.


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 - більш рідний будівельний інструмент для android, ніж SBT.

Існує хороший приклад концепції Scala для клієнта та сервера на базі сервера, а також інструмент побудови gradle як заздалегідь робочий стіл IntelliJ IDEA.

Великий заздалегідь, що основні класи є спільними для клієнта та сервера.

https://github.com/ghik/akkdroid

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


3

Найбільша проблема Scala на Android - це компіляція.

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

Я просто повернувся до Java після завершення великого проекту Scala Android для Android, оскільки час компіляції був дуже неприємним.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.