Scala-Programmierung für Android


258

Ich habe das Tutorial bei Scala und Android mit Scala 2.7.3 final verfolgt. Die resultierende Android-App funktioniert, aber selbst die einfachste Anwendung benötigt einige Minuten (!), Um kompiliert zu werden, und benötigt 900 kb komprimierte App , was ein Show-Stopper für mobile Anwendungen ist. Außerdem geht der IDE von Zeit zu Zeit der Speicher aus. Ich gehe davon aus, dass dexes nicht für große Bibliotheken wie die gemacht ist scala-library.

  • Meine Frage ist also: Hat jemand dies tatsächlich getan und gibt es eine Heilung dafür?

Antworten:


128

Ich habe einige grundlegende Android-Anwendungen in Scala geschrieben, nichts zu episch. Da ich kein Java-Programmierer bin, wurde mir vorgeschlagen, einen "Treeshake" zu verwenden. Ein Freund erklärte mir, dass dadurch alle unnötigen Bibliotheken aus den JAR- Dateien entfernt werden.

Ich habe es nicht dokumentiert, aber ich habe festgestellt, dass jemand anderes bereits:

http://chneukirchen.org/blog/archive/2009/04/programming-for-android-with-scala.html

Proguard ist nicht die einzige Lösung. Möglicherweise finden Sie etwas, das zu Ihrem Arbeitsablauf passt oder besser für Ihre Umgebung geeignet ist.

Darüber hinaus hat Google gerade JACK realisiert, das sich mit einer erheblichen Reduzierung der Build- und Speicherzeiten befasst. Siehe https://source.android.com/source/jack.html


3
Danke dir! Ich werde das ausprobieren müssen. Ich frage mich, ob es mit Eclipse (mit den Scala- und Android-Plugins) verwendet werden kann
Lemmy

36
Lemmy - gibt es einen Grund, warum Sie diese Antwort nicht akzeptiert haben? Vielleicht haben Sie eine bessere Lösung gefunden?
Bostone

3
Nach meiner Erfahrung ist Baumshake für die meisten nicht trivialen Scala-Codes nicht gut genug. Es ist einfach nicht aggressiv genug.
James Moore

45

Sie können jetzt das Android-Plugin für Gradle verwenden, um Android-Anwendungen in Scala zu erstellen. Es enthält das ProGuard-Tool zum Trimmen des Fettes aus der resultierenden APK-Datei und scheint also Ihren Anforderungen zu entsprechen.

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


Funktioniert super! Keine der Lösungen, die ich ausprobiert habe, hat sofort funktioniert, aber Ihr Gradle-Plugin hat mir nützliches Feedback gegeben, damit ich leicht beheben kann, was schief gelaufen ist.
Mendelt

Jason, arbeitest du noch daran? Das letzte Commit war vor 9 Monaten und die Version der Version wurde seitdem erhöht.
Peter Ajtai

Peter, die Entwicklung wurde gestoppt, weil Gradle jetzt das native Build-System für Android ist.
Jason Voegele



15

Ich habe diese detaillierte Lösung mit Eclipse 3.7, Scala 2.10 und dem Plug-in AndroidProguardScala v50 überprüft:

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

Alles funktioniert gut. Eine einfache Testanwendung mit skalierter Hauptaktivitätsklasse benötigt nur 38 KB. Bibliotheksprojekte werden unterstützt. Proguard wird beim Exportieren des Projekts aktiviert.


3
Das klingt großartig. Wie sind die Erstellungszeiten mit dieser Lösung bei der Bereitstellung auf einem Gerät (im Vergleich zur Bereitstellung eines vergleichbaren Java Android-Projekts)?
Evilcandybag

1
Die Erstellungszeit beträgt bei der Bereitstellung auf einem Gerät etwa 10 Sekunden. Ich hoffe, dass es eines Tages schneller geht.
Mikaël Mayer

6
Mit dem neuesten Android SDK und Plug-In dauert es jetzt ungefähr 1 Sekunde, da einige neue gute Cache-Implementierungen vorliegen.
Mikaël Mayer

7

Die Entwicklung von Android-Apps für Scala wird kontinuierlich weiterentwickelt. Der derzeit beste Weg, dies zu tun, erscheint SBT in Verbindung mit dem Android-SDK-Plugin , das * beibehalten wird und für mich in meinem Scala / Android-Projekt gut funktioniert. Ein etwas aktuelles Beispiel, das die Verwendung dieses Plugins mit dem bereits erwähnten Scaloid demonstriert, ist ebenfalls zu finden .

Bitte beachten Sie, dass diese Frage ein typisches Beispiel für eine Frage mit veralteten Antworten zum Stapelüberlauf ist. Diese Antwort wird wahrscheinlich auch irgendwann veraltet sein.

* Die anderen SBT-basierten Projekte, die in diesem Antwort-Thread erwähnt werden, scheinen zum Zeitpunkt des Schreibens in den letzten sechs Monaten keinen Code für sie geschrieben zu haben. Möglicherweise treten Kompatibilitätsprobleme mit neueren Versionen von Scala und SBT auf.


6

Wenn Sie Maven verwenden, verwenden Sie Android-Scala-Test als Startvorlage. Es funktioniert hervorragend für mich sofort.

Scaloid ist ein in Scala geschriebener Android-API-Wrapper, mit dem Sie Ihr Android-Programm im Scala-Stil schreiben können.


4

Sie können die Scala unter Android ohne SBT verwenden. Sie wurde extern von Gradle erstellt, um Android-Anwendungen zu erstellen. https://github.com/yareally/android-scala-intellij-no-sbt-plugin

Gradle ist ein nativeres Bauwerkzeug für Android als SBT.

Es gibt ein gutes Beispiel für das clientseitige und serverseitige Scala-Lösungskonzept und das Gradle-Building-Tool als Fortschritt für die IntelliJ IDEA-Workbench.

Großer Fortschritt, dass Kernklassen für Client und Server üblich sind.

https://github.com/ghik/akkdroid

Gutes Tutorial für IDEA und Android-Plugin: http://fxthomas.github.io/android-plugin/


3

Das größte Problem mit Scala unter Android sind die Kompilierungszeiten.

Möglicherweise kann das Strippen mit dem IDEA13 / Scala-Plugin auf einem Dual Quad Core (8-CPU) E5450 Xeon mit 8 GB aufgrund der Proguard-Klasse zwei Minuten oder länger dauern.

Ich bin einfach zu Java zurückgekehrt, nachdem ich ein umfangreiches Scala-Android-Projekt abgeschlossen hatte, da die Kompilierungszeiten zu frustrierend waren.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.